您的位置:首页 > 其它

设计模式(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、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: