设计模式

49 阅读2分钟

策略模式

策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个 if 判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化。

优点:

原来的写法很多if 语句,耦合性很高,而且代码臃肿,策略模式可以避免这种现象,遵从开闭原则,实现代码解耦,扩展新方法只需要继承策略接口就可以了。

缺点:

客户端必须知道所有的策略类,并自行决定使用哪一种策略类。

策略模式将构成很多策略类,可使用享元模式一定程度上减少对象的数量。

状态模式

允许一个对象在其内部状态改变时改变它的行为,对象看起来是修改了它的类。

  • 当一个对象的行为取决于它的状态,并且她必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

优点:

  • 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
  • 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。

缺点:

  • 状态模式的使用必然会增加系统类和对象的个数。
  • 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
  • 状态模式对"开闭原则"的支持并不太好。