1、介绍
概念:
模板方法模式(Template Method Pattern)【行为型模式】,定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
包含部分:
(1)AbstractClass:抽象类
在抽象类中定义一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个步骤,在其子类中可以重复定义并实现一个算法的各个步骤。
(2)ConcreteClass:具体子类
具体子类是抽象类的子类,用于实现在父类中定义的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体基本操作。
优点:
(1)模板方法模式可以在子类中定义详细的处理算法时不会改变算法的结构。
(2)是一种类库技术,提取累的公共行为,将公共行为放在父类中,而通过其子类可以实现不同的行为。
(3)提供了一种反向的控制结构,通过一个父类调用其子类的操作,通过对子类的扩展而增加新行为。
缺点:
每个不同的实现都需要定义一个子类,会导致子类数量的增加。
2、示例
在车管所给电动车、机动车办理车证业务。
#include<iostream>class CarTemplateMethod // 车管所办理业务
{
public:void takeNumber(){ // 取号std::cout << "take a number" << std::endl;}virtual void transact() = 0; // 办理业务。具体的业务流程在子类中实现void evaluate() // 反馈评分{std::cout << "Feedback rating" << std::endl;}void process() // 办理具体业务{takeNumber();transact();evaluate();std::cout << "===============================" << std::endl;}
};class ElectricVehicle:public CarTemplateMethod // 电动车办证
{virtual void transact(){std::cout << "take Electric Vehicle service" << std::endl;}};class MotorVehicle:public CarTemplateMethod // 机动车办证
{virtual void transact(){std::cout << "take Motor Vehicle service" << std::endl;}};int main()
{CarTemplateMethod* carTemplateMethod= new ElectricVehicle();carTemplateMethod->process();carTemplateMethod= new MotorVehicle();carTemplateMethod->process();delete carTemplateMethod;return 0;
}
结果:
take a number
take Electric Vehicle service
Feedback rating
===============================
take a number
take Motor Vehicle service
Feedback rating
===============================