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