设计模式之Strategy(策略模式)
2010-01-20 14:42
465 查看
此模式应用到的原则:
1、找出应用可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码写在一起。
2、针对接口编程,而非针对实现编程
3、多用组合,少用继承。
策略模式定义:
定义算法族,分别封装起来。让它们之间可以互相替换,此模式让算法的变化独立与使用此算法的客户
。
下面直接把书中的代码弄上来
代码:
1、首先定义抽象鸭子类(超类)
2、飞行接口+各种方法类
3、鸭子的叫法接口+实际叫法
4、各种鸭子类
5、测试类
1、找出应用可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码写在一起。
2、针对接口编程,而非针对实现编程
3、多用组合,少用继承。
策略模式定义:
定义算法族,分别封装起来。让它们之间可以互相替换,此模式让算法的变化独立与使用此算法的客户
。
下面直接把书中的代码弄上来
代码:
1、首先定义抽象鸭子类(超类)
/// <summary> /// 鸭子抽象类 /// </summary> public abstract class Duck { FlyBehavior flyBehavior;//飞行接口 QuackBehavior quackBehavior;//叫的接口 /// <summary> /// 构造器 /// </summary> public Duck() { } /// <summary> /// 动态设置如何飞行 /// </summary> /// <param name="fb"></param> public void setFlyBehavior(FlyBehavior fb) { flyBehavior = fb; } /// <summary> /// 动态设置如何叫 /// </summary> /// <param name="qb"></param> public void setQuackBehavior(QuackBehavior qb) { quackBehavior = qb; } /// <summary> /// 抽象方法---显示(供子类自定义) /// </summary> abstract void display(); /// <summary> /// 调用实际飞行 /// </summary> public void performFly() { flyBehavior.fly(); } /// <summary> /// 调用实际叫法 /// </summary> public void performQuack() { quackBehavior.quack(); } /// <summary> /// 游泳方法(公用) /// </summary> public void swim() { Console.WriteLine("All ducks float, even decoys!"); } }
2、飞行接口+各种方法类
/// <summary> /// 飞行接口 /// </summary> public interface FlyBehavior { public void fly(); } /// <summary> /// 不会飞行 /// </summary> public class FlyNoWay : FlyBehavior { public void fly() { Console.WriteLine("I can't fly"); } } /// <summary> /// 载着火箭飞 /// </summary> public class FlyRocketPowered : FlyBehavior { public void fly() { Console.WriteLine("I'm flying with a rocket"); } } /// <summary> ///翅膀飞 /// </summary> public class FlyWithWings : FlyBehavior { public void fly() { Console.WriteLine("I'm flying!!"); } }
3、鸭子的叫法接口+实际叫法
/// <summary> /// 叫的接口 /// </summary> public interface QuackBehavior { void quack(); } /// <summary> /// 呱呱叫 /// </summary> public class Quack : QuackBehavior { public void quack() { Console.WriteLine("Quack"); } } /// <summary> /// 吱吱叫 /// </summary> public class Squeak : QuackBehavior { public void quack() { Console.WriteLine("Squeak"); } } /// <summary> /// 不会叫 /// </summary> public class MuteQuack : QuackBehavior { public void quack() { Console.WriteLine("<< Silence >>"); } }
4、各种鸭子类
/// <summary> /// 玩具鸭 /// </summary> public class DecoyDuck : Duck { public DecoyDuck() { setFlyBehavior(new FlyNoWay()); setQuackBehavior(new MuteQuack()); } public void display() { Console.WriteLine("I'm a duck Decoy"); } } /// <summary> /// /// </summary> public class MallardDuck : Duck { public MallardDuck() { quackBehavior = new Quack(); flyBehavior = new FlyWithWings(); } public void display() { Console.WriteLine("I'm a real Mallard duck"); } } /// <summary> /// /// </summary> public class ModelDuck : Duck { public ModelDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Quack(); } public void display() { Console.WriteLine("I'm a model duck"); } } /// <summary> /// /// </summary> public class RubberDuck : Duck { public RubberDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Squeak(); } public void display() { Console.WriteLine("I'm a rubber duckie"); } }
5、测试类
/// <summary> /// 测试类 /// </summary> public class MiniDuckSimulator { public static void main(String[] args) { MallardDuck mallard = new MallardDuck(); RubberDuck rubberDuckie = new RubberDuck(); DecoyDuck decoy = new DecoyDuck(); ModelDuck model = new ModelDuck(); mallard.performQuack(); rubberDuckie.performQuack(); decoy.performQuack(); model.performFly(); model.setFlyBehavior(new FlyRocketPowered()); model.performFly(); } }
相关文章推荐
- iOS应用运用设计模式中的Strategy策略模式的开发实例
- [设计模式]002-设计模式之策略模式Strategy
- 设计模式-策略模式(Strategy)
- 软件设计之策略(Strategy)模式与装饰器模式
- 设计模式22:Strategy 策略模式(行为型模式)
- 【Java设计模式】(2)策略模式Strategy
- 【设计模式】策略模式Strategy_02
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- php设计模式 Strategy(策略模式)
- 设计模式(十八)之 Strategy(策略)
- Head First 设计模式 C++实现-Strategy(策略模式)
- 设计模式读书笔记之策略模式(Strategy)
- 设计模式之21 - 策略模式Strategy
- 设计模式--策略模式(Strategy)
- 设计模式之Strategy(策略)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- [设计模式]策略模式(strategy)---算术运算
- 设计模式---策略模式(Strategy Pattern with java)
- 设计模式深入学习--Strategy 策略模式(行为型模式)
- 设计模式之策略模式(Strategy)