模板方法模式(行为型模式)

模板模式template

概念

Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。

应用场景

Template Method模式一般应用在具有以下条件的应用中:

- 具有统一的操作步骤或操作过程

- 具有不同的操作细节

- 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

总结:

在抽象类中统一操作步骤,并规定好接口;让子类实现接口。这样可以把各个具体的子类和操作步骤接耦合

角色和职责

AbstractClass:抽象类的父类

ConcreteClass:具体的实现子类

templateMethod():模板方法

method1()与method2():具体步骤方法 

简单案例:

场景:泡茶或咖啡步骤一样:1、煮水 2、冲泡 3、倒入杯中 4、加入小料

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

/*模板方法模式*/
//主要用于做:同类事情,操作的步骤一样,只是细节处不一样,所以可以定义一个操作的模板

//统一定义的过程模板
class DrinkTemplate{
public:
	//煮水
	virtual void boilWater() = 0;
	//冲泡
	virtual void brew() = 0;
	//倒入杯中
	virtual void pourToCup() = 0;
	//加入辅助料
	virtual void addSomething() = 0;

	//统一的执行过程
	void make() {
		boilWater();
		brew();
		pourToCup();
		addSomething();
	}
};

class Coffee :public DrinkTemplate{
public:
	//煮水
	virtual void boilWater(){
		cout << "煮纯净水...." << endl;
	}
	//冲泡
	virtual void brew(){
		cout << "冲泡咖啡....." << endl;
	}
	//倒入杯中
	virtual void pourToCup(){
		cout << "咖啡倒入杯中....." << endl;
	}
	//加入辅助料
	virtual void addSomething(){
		cout << "加方糖...加柠檬...." << endl;
	}
};

class Tea :public DrinkTemplate{
public:
	//煮水
	virtual void boilWater(){
		cout << "煮自来水...." << endl;
	}
	//冲泡
	virtual void brew(){
		cout << "冲泡茶叶....." << endl;
	}
	//倒入杯中
	virtual void pourToCup(){
		cout << "茶水倒入杯中....." << endl;
	}
	//加入辅助料
	virtual void addSomething(){
		cout << "加糖....." << endl;
	}
};

void test01(){
	DrinkTemplate *drink = new Coffee;
	drink->make();
	delete drink;

	cout << "======================" << endl;

	drink = new Tea;
	drink->make();
	delete drink;
}

int main(void){
	test01();
	return 0;
}
发布了178 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42067873/article/details/105553704