策略模式
策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个 if 判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化。
优点:
原来的写法很多if 语句,耦合性很高,而且代码臃肿,策略模式可以避免这种现象,遵从开闭原则,实现代码解耦,扩展新方法只需要继承策略接口就可以了。
缺点:
客户端必须知道所有的策略类,并自行决定使用哪一种策略类。
策略模式将构成很多策略类,可使用享元模式一定程度上减少对象的数量。
状态模式
允许一个对象在其内部状态改变时改变它的行为,对象看起来是修改了它的类。
- 当一个对象的行为取决于它的状态,并且她必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。
优点:
- 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
- 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
缺点:
- 状态模式的使用必然会增加系统类和对象的个数。
- 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
- 状态模式对"开闭原则"的支持并不太好。