c++设计模式之模板模式

模板模式其实就是提供了一个代码的可复用模式。就是将对象中公共的部分都抽象到父类中,而将子类的特殊操作,通过虚函数重载的方式进行特化。

#include <iostream>
#include <memory>
using namespace std;

/*	模板模式
*	定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以
*	不改变一个算法的结构即可以重定义该算法的某些特定步骤。
*	模板方法是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
*/

class CStudent
{
public:
	CStudent() {}
	virtual ~CStudent() {}

	void Dohomework()
	{
		DoMath();
		DoSpecial_1();
		DoSpecial_2();
	}
protected:
	void DoMath()
	{
		cout << "study math" << endl;
	}
	virtual void DoSpecial_1() = 0;
	virtual void DoSpecial_2() = 0;
};

class CStudentA : public CStudent
{
public:
	CStudentA() {}
	~CStudentA() {}
	virtual void DoSpecial_1()
	{
		cout << "study English" << endl;
	}
	virtual void DoSpecial_2()
	{
		cout << "study Chinese" << endl;
	}
};

class CStudentB : public CStudent
{
public:
	CStudentB() {}
	~CStudentB() {}
	virtual void DoSpecial_1()
	{
		cout << " study C++" << endl;
	}
	virtual void DoSpecial_2()
	{
		cout << "study English" << endl;
	}
};

int main()
{
	std::unique_ptr<CStudent> PtrA = std::make_unique<CStudentA>();
	PtrA->Dohomework();

	std::unique_ptr<CStudent> PtrB = std::make_unique<CStudentB>();
	PtrB->Dohomework();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值