模板模式(Template Pattern):一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
模板模式
概要分析
把不变的接口提取到父类中,去除子类中的重复代码,子类只需要按照基类提供的接口做统一的处理。
使用场景
需要一系列的步骤或者过程实现业务,但是具体的每个步骤或者过程有一定的差异,例如我们的建造者模型中房屋的构造,需要对走廊,门,房间各个模块细节设计,就可以对流程做简单划分,给出接口,子类只需要按照模板接口实现具体细节执行,接口拼装不用关注。
源码Demo:
/* 模板模式: 有没有发现这个是建造者模式的简化版本:将此版本升级就编程了建造者模式 将一组行为升级成一个模板,从而实现了创建某一类产片的模板,这样就完成了一类产品的创建(这个产品依赖很对创建过程将此创建过程进行封装) 实现方法: 创建一个抽象接口类定义接口; 不同的子类去继承实现接口,然后在创建子类对象时,返回一个基类指针,然后使用基类指针去调用将此对象的创建过程进行封装的Make函数 */ #include <iostream> using namespace std; class MakeCar { public: virtual void makeHead() = 0; virtual void makeBody() = 0; virtual void makeTail() = 0; public: //把一组行为 变成 一个模板(编程一个函数);调用一个函数就可以实现一组函数的调用 void make() { makeHead(); makeBody(); makeTail(); } }; class MakeBus : public MakeCar { public: virtual void makeHead(){ cout << "bus 组装 车头" << endl; } virtual void makeBody(){ cout << "bus 组装 车身" << endl; } virtual void makeTail(){ cout << "bus 组装 车尾" << endl; } }; class MakeJeep : public MakeCar { public: virtual void makeHead(){ cout << "Jeep 组装 车头" << endl; } virtual void makeBody(){ cout << "Jeep 组装 车身" << endl; } virtual void makeTail(){ cout << "Jeep 组装 车尾" << endl; } }; int main() { MakeCar *bus = new MakeBus; bus->make();//此函数对创建过程进行了封装 MakeCar *jeep = new MakeJeep; jeep->make();//此函数对创建过程进行了封装 delete bus; delete jeep; // system("pause"); return 0; }