设计模式之策略和模板方法模式设计模式之策略和模板方法模式
设计模式之模板方法模式(Template Method)摘录
Template Method:(1)、意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以
不改变一个算法的结构即可重定义该算法的某些特定步骤。
(2)、适用性:A、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。B、各子类中公共的行为应被提取出
来并集中到一个公共父类中以避免代码重复。C、控制子类扩展。
(3)、效果:模板方法是一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为。
(4)、注意事项:A、使用C++访问控制:在C++中,一个模板方法调用的原语操作可以被定义为保护成员。这保证它们只被模
板方法调用。必须重定义的原语操作须定义为纯虚函数。模板方法自身不需被重定义;因此可以将模板方法定义为一个非虚成
员函数。B、尽量减少原语操作:定义模板方法的一个重要目的是尽量减少一个子类具体实现该算法时必须重定义的那些原语
操作的数目。需要重定义的操作越多,客户程序就越冗长。C、命名约定:可以给应被重定义的那些操作的名字加上一个前缀
以识别它们。
(5)、相关模式:A、FactoryMethod模式常被模板方法调用。B、模板方法使用继承来改变算法的一部分。Strategy使用委托
来改变整个算法。
(6)、TemplateMethod:把不变的代码部分都转移到父类中,将可变的代码用virtual留给子类重写。
(7)、Template Method模式实际上就是利用面向对象中多态的概念实现算法实现细节和高层接口的松耦合。可以看到
Template Method模式采取的是继承方式实现这一点的,由于继承是一种强约束性的条件,因此也给Template Method模式带
来一些许多不方便的地方。其关键是将通用算法(逻辑)封装起来,而将算法细节让子类实现(多态)。
Template Method模式获得一种反向控制结构效果,这也是面向对象系统的分析和设计中一个原则DIP(依赖倒置:
Dependency Inversion Principles)。其含义就是父类调用子类的操作(高层模块调用低层模块的操作),低层模块实现高层模块
声明的接口。这样控制权在父类(高层模块),低层模块反而要依赖高层模块。
示例代码1: