类图区别:
模版方法(Template Method): 策略模式(Strategy): 状态模式(State):
意图,动机和适用性区别:
模版方法(Template Method): 意图: 定义一个操作中的算法骨架, 而将一些步骤延迟到子类中. TempeleteMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 动机: 多种输出模板. 适用性:
- 一次性实现一个算法的不变的部分, 并将可变的行为留给子类来实现.
- 公共行为在父类, 不同之处分离为新的操作.
- 控制子类扩展.
- 模板方法只在特定点调用“hook”操作, 这样就只允许在这些点进行扩展.
- 许多相关的类仅仅是行为不同.
- 需要使用一个算法的不同变体.
- 一个类定义了多种行为, 并且这些行为在操作用以多个条件语句的形式出现.
- 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.
- 把状态的判断逻辑转移到表示不同状态的一系列类当中, 可以把复杂的判断逻辑简化.
- 当一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为时, 就可以考虑使用状态模式了.
- 一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为.
- 一个操作中含有庞大的多分支的条件语句, 且这些分支依赖于该对象的状态.