码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式——策略模式2

时间:2016-10-09 11:00:16      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

继承导致的缺点:

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

 

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

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

 

策略模式:

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

特点:

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

 

设计模式——策略模式2

标签:

原文地址:http://www.cnblogs.com/zhang-chi/p/5941259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!