设计模式(1)----策略模式
2010-06-22 16:45
211 查看
策略模式
定义: Identify the aspects of your application that vary and separate them from what stays the same.(找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。)
针对问题:同一个父类的子类之间有着不同的行为,一般的方式我们会在父类中定义抽象方法,在子类中重写该方法。然而在具体的应用中,可能有些子类不需要实现该方法,也可能子类较多,每一个都要重写,这显然不是一个好的方法,为了增强设计模式的可维护,高内聚,低耦合。我们将子类之间的不同的行为视为变动的部分,以接口的形式定义行为,并定义行为类实现该接口,在父类中我们只需提供该接口,子类通过该接口实例化相应的行为类,实现自身的行为。
以一个鸭子游戏为例:
如上图Duck类提供了两个接口,flyBehavior和quackBehavior,在FlyWithWings、FlyNoWay实现了flyBehavior接口,Quack1,Quack2,Quack3实现了quackBehavior接口。
从上可以看出flyBehavior,quackBehavior可看做为两个公共接口,通过该接口提供不同的算法,Duck类使用了这两个接口,作为可变部分的flyBehavior,quackBehavior和作为鸭子共性的抽象类Duck的子类实现了分离。Duck子类MallardDuck,RedheadDuck,RubberDuck,可能有的鸭子会飞,有的不会,有的嘎嘎叫,有的吱吱叫,甚至还有我们未曾预料到的行为。没关系,任何行为的添加都不会影响原有继承模式的结构,因为可变的部分已经被剥离出来。
策略模式的优点:
1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
缺点:
1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
定义: Identify the aspects of your application that vary and separate them from what stays the same.(找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。)
针对问题:同一个父类的子类之间有着不同的行为,一般的方式我们会在父类中定义抽象方法,在子类中重写该方法。然而在具体的应用中,可能有些子类不需要实现该方法,也可能子类较多,每一个都要重写,这显然不是一个好的方法,为了增强设计模式的可维护,高内聚,低耦合。我们将子类之间的不同的行为视为变动的部分,以接口的形式定义行为,并定义行为类实现该接口,在父类中我们只需提供该接口,子类通过该接口实例化相应的行为类,实现自身的行为。
以一个鸭子游戏为例:
如上图Duck类提供了两个接口,flyBehavior和quackBehavior,在FlyWithWings、FlyNoWay实现了flyBehavior接口,Quack1,Quack2,Quack3实现了quackBehavior接口。
从上可以看出flyBehavior,quackBehavior可看做为两个公共接口,通过该接口提供不同的算法,Duck类使用了这两个接口,作为可变部分的flyBehavior,quackBehavior和作为鸭子共性的抽象类Duck的子类实现了分离。Duck子类MallardDuck,RedheadDuck,RubberDuck,可能有的鸭子会飞,有的不会,有的嘎嘎叫,有的吱吱叫,甚至还有我们未曾预料到的行为。没关系,任何行为的添加都不会影响原有继承模式的结构,因为可变的部分已经被剥离出来。
策略模式的优点:
1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
缺点:
1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
相关文章推荐
- 设计模式之:策略模式(strategy)
- 【JAVA设计模式07】——策略模式
- 设计模式22:Strategy 策略模式(行为型模式)
- JAVA设计模式之策略模式
- HeadFirst设计模式--策略模式
- 设计模式学习之策略模式
- Java开发之设计模式--策略模式(Strategy Pattern)
- iOS设计模式 - (4)策略模式
- 设计模式学习之策略模式
- 设计模式之策略(strategy)模式
- 设计模式:策略模式
- [设计模式]策略模式
- 策略设计模式
- 设计模式之策略模式简要分析
- 设计模式之策略模式
- <C/C++ 版> 设计模式 学习之 策略模式+工厂模式
- Android设计模式——策略模式之源码使用场景(三)
- 设计模式 之 策略模式
- 设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)
- 设计模式那点事--策略模式