模版方法,策略模式和状态模式之间的区别

[b]类图区别:[/b]

模版方法(Template Method):
[img]http://dl.iteye.com/upload/attachment/169855/3f40335c-9043-3cb3-b076-a8dde5cadb65.jpg[/img]
策略模式(Strategy):
[img]http://dl.iteye.com/upload/attachment/169853/e34aa92a-d750-3af2-b613-b095d17e12d5.jpg[/img]
状态模式(State):
[img]http://dl.iteye.com/upload/attachment/169851/8007fa0b-0d85-388f-9887-88bd5833a245.jpg[/img]

[b]意图,动机和适用性区别:[/b]

模版方法(Template Method):
意图: 定义一个操作中的算法骨架, 而将一些步骤延迟到子类中.
TempeleteMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.
动机: 多种输出模板.
适用性:
[list]
[*] 一次性实现一个算法的不变的部分, 并将可变的行为留给子类来实现.
[*] 公共行为在父类, 不同之处分离为新的操作.
[*] 控制子类扩展.
[*] 模板方法只在特定点调用“hook”操作, 这样就只允许在这些点进行扩展.
[/list]

策略模式(Strategy):
意图: 定义一系列算法, 把它们一个个封闭起来, 并且使它们可相互替换. 本模式使得算法可独立于使用它的客户而变化.
动机: 将算法硬编进使用他们的类中是不合适的.
适用性:
[list]
[*] 许多相关的类仅仅是行为不同.
[*] 需要使用一个算法的不同变体.
[*] 一个类定义了多种行为, 并且这些行为在操作用以多个条件语句的形式出现.
[/list]

状态模式(State):
意图: 允许一个对象在其内部状态改变时改变它的行为. 这个对象看起来似乎修改了它的类.
动机:
[list]
[*] 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.
[*] 把状态的判断逻辑转移到表示不同状态的一系列类当中, 可以把复杂的判断逻辑简化.
[*] 当一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为时, 就可以考虑使用状态模式了.
[/list]
适用性:
[list]
[*] 一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为.
[*] 一个操作中含有庞大的多分支的条件语句, 且这些分支依赖于该对象的状态.
[/list]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值