设计模式之模板方法模式(C++)

模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了一个很好的代码复用解决方案。

通用模板方法的UML类图


模板方法是将原来不变的行为和可变的行为剥离开,将不变的行为剥离到基类中,由基类提供一个模板方法,模板方法设置了算法的骨架,而各家的各个实现步骤和细节由各个子类具体实现。

抽象类AbstractClass 提供了一个模板方法定义算法骨架,声明了2个抽象方法为算法的具体实现细节,该抽象方法由各自的子类实现。

具体的类ConcreteClass 实现抽象方法,完成算法的具体步骤细节实现。


下面是通过的模板方法代码:

Template.h

class AbstractClass
{
public:
	virtual void PrimitiveOperation1()=0;
	virtual void PrimitiveOperation2()=0;
	void TemplateMethod();
	virtual ~AbstractClass(){}
};

class ConcreteClass1 :public AbstractClass
{
public:
	virtual void PrimitiveOperation1();
	virtual void PrimitiveOperation2();
	~ConcreteClass1(){}
};

class ConcreteClass2 :public AbstractClass
{
public:
	virtual void PrimitiveOperation1();
	virtual void PrimitiveOperation2();
	~ConcreteClass2(){}

};

Template.cpp

#include "Template.h"
#include <iostream>
void AbstractClass::TemplateMethod()
{
	//模板方法定义算法的骨架
	PrimitiveOperation1();
	PrimitiveOperation2();
}

void ConcreteClass1::PrimitiveOperation1()
{
	std::cout << "算法步骤1" << std::endl;
}

void ConcreteClass1::PrimitiveOperation2()
{
	std::cout << "算法步骤2" << std::endl;
}

void ConcreteClass2::PrimitiveOperation1()
{
	std::cout << "组成部分1" << std::endl;
}

void ConcreteClass2::PrimitiveOperation2()
{
	std::cout << "组成部分2" << std::endl;
}

客户端代码:

#include "Template.h"

int main()
{
	AbstractClass *AC1 = new ConcreteClass1();
	AC1->TemplateMethod();

	AbstractClass *AC2 = new ConcreteClass2();
	AC2->TemplateMethod();

	delete AC1;
	delete AC2;

}

程序运行结果:



  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值