行为型 模板模式

模板模式(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;
}

猜你喜欢

转载自blog.csdn.net/yun6853992/article/details/119132840