[Design Pattern] Strategy

范例参考至 Head First Design Patterns

IFlyBehavior


public interface IFlyBehavior {
	public void fly();
}

FlyNoWay


public class FlyNoWay implements IFlyBehavior
{
	public void fly()
	{
		System.out.println("I can‘t fly!!");
	}
}

FlyWithWings


public class FlyWithWings implements IFlyBehavior{
	public void fly()
	{
		System.out.println("I‘m flying!!");
	}
}

IQuackBehavior


public interface IQuackBehavior {
	public void quack();
}

Quack


public class Quack implements IQuackBehavior{
	public void quack()
	{
		System.out.println("Quack");
	}
}

MuteQuack


public class MuteQuack implements IQuackBehavior{
	public void quack()
	{
		System.out.println(">");
	}
}

Squeak


public class Squeak implements IQuackBehavior{
	public void quack()
	{
		System.out.println("Squeak");
	}
}

Duck


public abstract class Duck {
	IFlyBehavior iFlyBehavior;
	IQuackBehavior iQuackBehavior;
	public Duck(){}
	public abstract void display();
	public void performFly()
	{
		iFlyBehavior.fly();
	}
	public void perFormQuack()
	{
		iQuackBehavior.quack();
	}
	public void SetFlyBehavior(FlyBehavior fb)
	{
		iFlyBehavior = fb;
	}
	public void SetQuackBehavior(QuackBehavior qb)
	{
		iQuackBehavior = qb;
	}
	public void swim()
	{
		System.out.println("All ducks float, even decoys!");
	}
}

RobotDuck


public class RobotDuck extends Duck{
	public RobotDuck()
	{
		iQuackBehavior = new MuteQuack();
		iFlyBehavior = new FlyNoWay();
	}
	public void display()
	{
		System.out.println("I‘m a real Mallard duck");
	}
}

MallardDuck


public class MallardDuck extends Duck{
	public MallardDuck()
	{
		iQuackBehavior = new Quack();
		iFlyBehavior = new FlyWithWings();
	}
	public void display()
	{
		System.out.println("I‘m a real Mallard duck");
	}
}

MiniDuckSimulator


public class MiniDuckSimulator {
	public static void main(String[] args)
	{
		Duck mallard = new MallardDuck();
		mallard.perFormQuack();//perFormQuack() from Duck class
		mallard.performFly();

		System.out.println("-----------------------------------");
		System.out.println("change before...");
		mallard = new RobotDuck();
		mallard.perFormQuack();//change before the behavior
		mallard.performFly();

		System.out.println("change after...");
		mallard.SetFlyBehavior(new FlyWithWings());
		mallard.SetQuackBehavior(new Quack());
		mallard.perFormQuack();//before change the behavior
		mallard.performFly();
	}
}

Output:

Quack

I‘m flying!!

-----------------------------------

change before...

>

I can‘t fly!!

change after...

Quack

I‘m flying!!

原文:大专栏  [Design Pattern] Strategy

原文地址:https://www.cnblogs.com/chinatrump/p/11458336.html

时间: 2024-08-30 06:45:12

[Design Pattern] Strategy的相关文章

Design Pattern 设计模式1 - Strategy 1

实现 : Defferent Heros attack Defferently. - 不同的英雄使用不用的招数 Strategy设计的思路: 基类A,更加小的基类B,新的继承类C: 1 从基类A中抽出一个更加小的基类B 2 利用这个更加小的基类B实现不同的效果 3 把这个更加小的基类B包含进基类A中去 4 新的继承类C只需要和基类A打交道,设计不同行为,不需要理会更加小的基类B #pragma once #ifndef _STRATEGY_HEROS_H #define _STRATEGY_HE

Head First 之 Design Pattern(一):Strategy Pattern && 初入设计模式殿堂

头一回阅读<Head First 设计模式>,感觉语言生动形象,把一个个抽象的模式描述的浅显易懂,就像白话文一样. 正如作者推荐如何使用这本书. 你懂Java吗(不太懂... 会C++不影响吧)? 你想学习.了解.记得并应用设计模式,以及其所基于的OO设计原则吗(是的,我正在深入学习C++呢)? 你是不是更喜欢一种轻松愉悦的学习环境(absolutely)? 这本书正是我需要的~   "Head First"就是那些不断学习的人们,像他们致敬,共勉加油~ 使用设计模式最好的

Design Pattern Explained 读书笔记四——Strategy

What? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it. --GOF 定义一系列算法,封装每一个,并且使每个封装是可相互替换的.Strategy模式,做到了 以独立于使用这些算法的客户端的方式 , 替换这一系列算法算法.自由

Head First Design Pattern 读书笔记(1) 策略模式

Head First Design Pattern 读书笔记(1) Strategy Pattern 策略模式 这几天为了锻炼看英语文档的能力,开着有道硬着头皮看 <Head First Desgin Pattern>的原版书,顺便做下笔记,把里面提到的每个模式通过回忆的方式画出来复习并记下来总结下学习成果=.= 关于设计模式 使用设计模式是为了增强程序的复用性,拓展性,易维护性. 设计模式会增加程序代码的复杂度,并不是所有情况都必须使用设计模式,需要根据需求以及经验评估使用场景. 学习并掌握

C++ Design Pattern: What is a Design Pattern?

Q: What is a Design Pattern? A: Design Patterns represent solutions to problems what arise when developing software within a particular context. Each pattern describes a problem which occurs over and over again in our environment, and then describes

设计模式(Design pattern)概述

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结, 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性 设计框架 可复用面向对象软件系统一般划分为两大类:应用程序工具箱和框架(Framework) 我们平时开发的具体软件都是应用程序 而框架是构成一类特定软件可复用设计的一组相互协作的类 框架通常定义了应用体系的整体结构类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节. 框架主要记录软件应用中

DP什么意思 design pattern 设计模式

DP  design pattern 大话设计模式  中的DP 是设计模式的意思 设计模式的书 ,最经典最原始的就是 GOF 的<设计模式>了. 设计模式的书基本上大多是以这 20 多个模式分开讲.含<大话设计模式> 学了 OOL 写的程序基本上是 OB 的. 只有慢慢掌握了 DP 才能写出真正的 OO 程序. 思想 -> 设计原则 -> DP -> OOD

Head First Design Pattern 读书笔记(2) 观察者模式

Head First Design Pattern 读书笔记(2) Observer Pattern 观察者模式 Observer Pattern 类图 定义 观察者模式:在对象间定义一个一对多的关系,当其中一个的对象发生改变时,所有依赖于这个对象的对象(即观察者们)都会自动更新或做执行某些行为. 几个OO的原测 尽量以松耦合的方式处理对象间关系–>软件工程时候学的"高內聚,低耦合"的好处 关于观察者模式 被观察对象通知观察者可以使用推送的方式(类图中带参数的notifyActi

Design Pattern Singleton 单一模式

单一模式的几个注意点: 一) 设计单一模式,首先需要把构造函数给私有化了,不让外界访问,那么外界只能通过提供的函数获取一个新的类. 二) C++的单一模式,记得要在类外初始化一个类,否则或内存出错的. 三) 这个唯一的类必须是要静态的 程序: #ifndef _SINGLETON_H #define _SINGLETON_H #include <iostream> #include <string> using namespace std; class DuGuJiuJian {