Template模式是很简单模式,但是也应用很广的模式。如上面的分析和实现中阐明的Template是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。
Template模式获得一种反向控制结构效果,这也是面向对象系统的分析和设计中一个原则DIP(依赖倒置:Dependency Inversion Principles)。其含义就是父类调用子类的操作(高层模块调用低层模块的操作),低层模块实现高层模块声明的接口。这样控制权在父类(高层模块),低层模块反而要依赖高层模块。
继承的强制性约束关系也让Template模式有不足的地方,我们可以看到对于ConcreteClass类中的实现的原语方法Primitive1(),是不能被别的类复用。假设我们要创建一个AbstractClass的变体AnotherAbstractClass,并且两者只是通用算法不一样,其原语操作想复用AbstractClass的子类的实现。但是这是不可能实现的,因为ConcreteClass继承自AbstractClass,也就继承了AbstractClass的通用算法,AnotherAbstractClass是复用不了ConcreteClass的实现,因为后者不是继承自前者。
Template模式暴露的问题也正是继承所固有的问题,Strategy模式则通过组合(委托)
来达到和Template模式类似的效果,其代价就是空间和时间上的代价,关于Strategy模式的详细讨论请参考Strategy模式解析。

posted on 2009-09-29 19:54  AlexusLi  阅读(326)  评论(2编辑  收藏  举报