首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

对策模式和模版模式的异同

2012-08-31 
策略模式和模版模式的异同Strategy模式 ?的应用场景是:1. 多个类的分别只是在于行为不同2. 你需要对行为的

策略模式和模版模式的异同

Strategy模式 ?的应用场景是:
1. 多个类的分别只是在于行为不同
2. 你需要对行为的算法做很多变动
3. 客户不知道算法要使用的数据

?

Template Method模式 ?的应用场景是:
1. 你想将相同的算法放在一个类中,将算法变化的部分放在子类中实现
2. 子类公共的算法应该放在一个公共的类中,避免代码重复

?

我们知道,设计模式中有这么一个原则: Prefer composition to inheritance.

这句话的背景是OO初期大家都把继承看作是万能的,并过度使用继承来实现多态->可扩展.

理解原则的时候不能脱离它的背景,不然就成盲从了.Template Method模式应该是伴随着OO的出现而萌生的.它是OO中最直观的思考方式的结果.基类留下可变化的空间给子类,由继承类来决定具体行为.听起来是不错,不过...一旦基类的接口发生了变化,每个继承类都得跟着修改才能够继续使用.这就是所谓高耦合与难维护的说法的来源.

?

Strategy与Template Method模式算是composition与inheritance的典型应用了

?

GoF的设计模式那本书里有这么一句话:"Template methods use inheritance to vary part of an algorithm. Strategies use delegation to vary the entire algorithm.", 说的正是这个问题.回到具体问题上,

如果我们要封装的算法适合于提供给用户任意使用,是"一整个算法",那么用Strategy模式较好;

如果要封装的变化是一个算法中的部分(换言之,大算法的步骤是固定的),而且我们不希望用户直接使用这些方法,那么应该使用Template Method模式.

?

就此,问题的"痛处"算是抓住了.

热点排行