Template Method 模式
意图 定义一个操作中的算法顾家,将一些步骤推迟到子类中实现。可以不改变算法的结构而重定义该算法的步骤。
问题 要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上实现可能不同
模版模式
模版模式 重构中的Form Template Method 有异曲同工之妙,首先抽象出实现中的相同部分,放在模版方法中 ,将不同部分定义为抽象方法,分别在子类中实现,但是模板方法的算法骨架相同。
1)模板模式和策略模式都是“开-闭原则”的最佳教科书,因为他们可以随时扩展新的算法(部分或者整体)
2)他们都是解决算法经常改变的问题(比如商场促销手段、权限判断方法等等)
他们有什么不同?
呵呵,细心看到应该已经发现,我强调了很多次,部分与整体!这个就是他们的“要害”
模板模式传说是很早以前OO设计就出现的方法,那时候扩展软件的方法就是“继承”,然后添加新功能
(扯远了),模板模式就是让父类留出需要经常变动的“地方”,然后让子类去填补变动的地方
但是它是不能改变整个算法的“框架”的,能变动的只是预留的部分而已,所以是部分的修改!
而策略模式不同,因为它是面向接口的!持有的是一个接口的引用,它的“算法框架”可以全部放在
实现策略接口的类里边,这样,程序员就能控制整个的算法
什么时候用什么模式?
这个需要看需求,如果设计者不想让别人乱动“主要的逻辑”,只开放一些局部功能,那么模板模式
是正确的。假如设计者需要给别人很大的灵活性,那么策略模式是首选。