第十章-模板方法模式

模板方法模式(TemplateMethod): 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

图片

基本代码

#include<iostream>
#include<string>

using namespace std;

/*AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,
  他给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。*/

class AbstractClass
{
public:
	virtual void PrimitiveOperation1() = 0;    //一些抽象行为,放到子类去实现
	virtual void PrimitiveOperation2() = 0;

	void TemplateMethod()    //模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,他们都推迟到子类实现
	{
		PrimitiveOperation1();
		PrimitiveOperation2();
	}
};

/*ConcreteClass,实现父类所定义的一个或多个抽象方法*/
class ConcreteClassA : public AbstractClass
{
public:
	void PrimitiveOperation1()
	{
		cout << "具体类A方法1实现" << endl;
	}

	void PrimitiveOperation2()
	{
		cout << "具体类A方法2实现" << endl;
	}
};

class ConcreteClassB : public AbstractClass
{
public:
	void PrimitiveOperation1()
	{
		cout << "具体类B方法1实现" << endl;
	}

	void PrimitiveOperation2()
	{
		cout << "具体类B方法2实现" << endl;
	}
};

int main()
{
	AbstractClass *c;
	c = new ConcreteClassA();
	c->TemplateMethod();

	c = new ConcreteClassB();
	c->TemplateMethod;

	system("pause");
	return 0;
}

模板方法就是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变形为的纠缠。

posted @ 2019-12-08 09:17  微风吹过165  阅读(119)  评论(0编辑  收藏  举报