设计模式——策略模式2

Posted 张驰小方块

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——策略模式2相关的知识,希望对你有一定的参考价值。

继承导致的缺点:

  • 代码在多个子类中重复(有些父类的行为,子类必须覆盖,例如有些鸭子不会飞,那么需要覆盖fly,则导致很多不会飞的子类都有一个什么都不干的fly方法)
  • 运行时的行为不容易改变(实例一旦创建,行为就确定了,很难再进行改变,例如给橡皮鸭装上火箭发射器)
  • 很难知道所有鸭子的全部行为(总有需求变化,增加鸭子的行为)
  • 改变会前一发动全身,造成其他鸭子不想要的改变(比如父类增加了一个会飞的行为,那么所有的子类鸭子都会飞了,在有些情况下造成了意外的错误,例如橡皮鸭飞了起来)

 

如果将行为设计成接口,而不同鸭子的实例实现相应的接口,依然有着巨大的缺点:

有可能有100只鸭子实现了会飞的接口,他们的fly方法完全一样(代码重复!!!),并且一旦需求发生改变,需要改变fly方法,要改100处!!!也就是无法代码复用。

 

策略模式:

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

特点:

  • 行为都被封装成类,然后通过“有一个”的方式,将行为集成到对象中(行为类作为客户类的属性)。
  • 有非常好的可维护性,如果想增加一种行为,只需要新定义一种行为类,然后增加客户类的一个属性就行了。并且不会影响到已有的系统。
  • 能够动态的替换不同的行为(客户类创建好之后,依然可以通过set方法来设置行为类)。

 

以上是关于设计模式——策略模式2的主要内容,如果未能解决你的问题,请参考以下文章

策略模式与工厂模式实践

策略模式与工厂模式实践

设计模式中的多态——策略模式详解

设计模式之策略模式

设计模式之策略模式与责任链模式详解和应用

设计模式系列2 策略模式