策略模式 The Strategy pattern

  • 软件开发的一个不变真理是:change!
  • 库与框架无法帮助我们将应用组织成容易理解、容易维护、具有弹性的架构,所以需要设计模式

策略模式

     定义了算法族,分别封装起来(封装在一组类中,可以被轻易的扩充与改变),让它们之间可以相互替换。

此模式让算法的改变独立于使用算法的客户。

设计原则

1、“封装变化”。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起。

2、针对接口编程,而不是针对实现编程。

3、对用组合,少用继承。

(组合是运行时动态调用,可以在运行时动态改变行为,因为我们可以更换不同的实现。

继承是编译时静态决定了的)

组 合 、继 承 对比

1、组合(优点):不破坏封装,整体类与局部类之间松耦合,彼此相对独立

      继承(缺点):破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性

2、组合(优点):具有较好的可扩展性

      继承(缺点):支持扩展,但是往往以增加系统结构的复杂度为代价

3、组合(优点):支持动态组合。在运行时,整体对象可以选择不同类型的局部对象

      继承(缺点):不支持动态继承。在运行时,子类无法选择不同的父类

4、组合(优点):整体类可以对局部类进行包装,封装局部类的接口,提供新的接口

      继承(缺点):子类不能改变父类的接口

5、组合(缺点):整体类不能自动获得和局部类同样的接口

      继承(优点):子类能自动继承父类的接口

6、组合(缺点):创建整体类的对象时,需要创建所有局部类的对象

      继承(优点):创建子类的对象时,无须创建父类的对象

类图

以《Head First Design Patterns》中鸭子为例。

(转载请注明出处 ^.^)

原文地址:https://www.cnblogs.com/windlaughing/p/2989136.html