Template Method(模板方法)–类行为型模式
一、意图
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二、动机
1.在软件构建过程中,对于某一项任务,它常常有稳定的整体操作 结构,但各个子步骤却有很多改变的需求,或者由于固有的原因 (比如框架与应用之间的关系)而无法和任务的整体结构同时实现。
2.如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变 化或者晚期实现需求?
三、适用性
1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
3.控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展。
四、结构
五、效果
模板方法导致一种反向的控制结构。即一个父类调用一个子类的操作。
六、实现
1.使用C++访问控制。
2.尽量减少原语操作。
3.命名约定。
七、要点总结
1.Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性) 为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2.除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
3.在具体实现方面,被Template Method调用的虚方法可以具有实 现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将 它们设置为protected方法。
八、相关模式
Factory Method模式常被模板方法调用。
Strategy:模板方法是使用继承来改变算法的一部分。Strategy使用委托来改变整个算法。
九、举例说明
自己把控整个制作流程,部分细节让小弟实现。
本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解