学习《图说设计模式》模板模式

1. 概念

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

2. 应用场景

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

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

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

3. 角色和职责

学习《图说设计模式》模板模式_第1张图片
AbstractClass:抽象类的父类
ConcreteClass:具体的实现子类
templateMethod():模板方法
method1()与method2():

4. 案例


#include 
using namespace std;


class MakeCar
{
public:
	virtual void MakeHead() = 0;
	virtual void MakeBody() = 0;
	virtual void MakeTail() = 0;

public:
	void Make()
	{
		MakeTail();
		MakeBody();
		MakeHead();
	}
};

//
class Jeep : public MakeCar
{
public:
	virtual void MakeHead()
	{
		cout << "jeep head" << endl;
	}

	virtual void MakeBody()
	{
		cout << "jeep body" << endl;
	}

	virtual void MakeTail()
	{
		cout << "jeep tail" << endl;
	}
};

class Bus : public MakeCar
{
public:
	virtual void MakeHead()
	{
		cout << "Bus head" << endl;
	}

	virtual void MakeBody()
	{
		cout << "Bus body" << endl;
	}

	virtual void MakeTail()
	{
		cout << "Bus tail" << endl;
	}
};

int main()
{
	MakeCar *car = new Bus;
	car->Make();
	delete car;

	MakeCar *car2 = new Jeep;
	car2->Make();
	delete car2;

	
	return 0;
}

学习《图说设计模式》模板模式_第2张图片

5. 优缺点

优点:

  • 封装不变部分,扩展可变部分。把认为不变部分的算法封装到父类中实现,而可变部分的则可以通过继承来继续扩展。
  • 提取公共部分代码,便于维护。
  • 行为由父类控制,子类实现

缺点:

算法骨架需要改变时需要修改抽象类。

按照设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类负责完成具体的事务属性和方法,但是模板方式正好相反,子类执行的结果影响了父类的结果,会增加代码阅读的难度。

你可能感兴趣的:(图说设计模式)