策略模式
2014-12-11 19:08
113 查看
策略模式:把可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现
面向接口编程
多用组合,少用继承
优势:
因为使用了组合,使构架更加灵活富有弹性,可以很好的应对变化(开闭原则)
更好的代码复用性
消除大量的条件语句
劣势:
客户代码需要了解每个策略实现的细节增加了对象的条目
实现:
代码实例:
我们有一个鸭子的超类:
鸭子有两个行为:飞和叫
不同的鸭子的行为是不同的,也就是说flyBehavior和quackBehavior是代码中可变的部分,将他们独立出来
public abstract class Duck { protected FlyBehavior flyBehavior; protected QuackBehavior quackBehavior; public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } public void performFly(){ flyBehavior.fly(); } public void performQuack(){ quackBehavior.quack(); } public abstract void display(); void swim(){ }; }
定义fly行为的接口
public interface FlyBehavior { void fly(); }定义quack行为的接口
public interface QuackBehavior { void quack(); }
写一个实现fly接口的行为类 面向接口编程
/* * 使用火箭飞行 */ public class FlyRocketPowered implements FlyBehavior{ public void fly() { System.out.println("i'm fly with a rocket"); } }写一个实现quack接口的行为类 面向接口编程
/** * 实现呱呱叫 * @author yang * */ public class Quack implements QuackBehavior{ public void quack() { System.out.println("实现呱呱叫"); } }
写一个ModelDuck类实现抽象原始类Duck 使用聚合
public class ModelDuck extends Duck{ public ModelDuck() { flyBehavior = new FlyRocketPowered(); quackBehavior = new Quack(); } @Override public void display() { System.out.println("i'm a model duck"); } }测试代码
public class MiniDuckSimulator { public static void main(String[] args) { Duck model = new ModelDuck(); model.performQuack(); model.performFly(); model.setFlyBehavior(new FlyNoWay()); model.performFly(); model.setFlyBehavior(new FlyRocketPowered()); model.performFly(); } }
相关文章推荐
- 设计模式之Strategy(策略)
- 设计模式(20)-策略模式(Strategy)
- 策略模式之C++版本
- 应用泛型的策略模式
- 对象模型--策略、模式、应用 笔记1
- [浪子学编程][MS Enterprise Library]ObjectBuilder之设计模式(一):策略模式
- (22)策略模式-Strategy Pattern-康熙收复台湾-明珠和索额图的不同策略
- 从诸葛亮的三个锦囊妙计谈策略模式
- 《Java与模式》学习笔记之九-----策略模式(Strategy Pattern)
- AspectJ实现设计模式(二)——策略模式
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 策略模式之C#版本(原创翻译版本)
- 设计模式实战(一)——使用策略模式(strategy pattern)实现多关键字排序
- Delphi模式编程之策略模式(下)
- 設計模式之Strategy(策略)
- 深入浅出策略模式
- 设计模式——策略模式
- 设计模式之策略模式(Strategy)
- 对象模型--策略、模式、应用 笔记2---选择对象