定义一个操作中的算法骨架,而将一些步骤延迟到子类中。用一句听得懂的话说,就是把一个算法中不变的部分搬移到超类——父类中,把变的部分留给子类,通过接口重写的方式完成各自变化的部分。好处是,减少了代码的耦合,提高了复用。
简单代码如下:
class Father_Class
{
public:
void template_method()
{
/*
*不变部分
*
*/
//可变部分
method1();
method2();
/*
*不变部分
*
*/
};
//可变部分
virtual void method1() = 0;
virtual void method2() = 0;
};
class Sub1:public Father_Class
{
public:
virtual void method1(){ cout << "sub1 method1" << endl; };
virtual void method2(){ cout << "sub1 method2" << endl; };
};
class Sub2 :public Father_Class
{
public:
virtual void method1(){ cout << "sub2 method1" << endl; };
virtual void method2(){ cout << "sub2 method2" << endl; };
};
int main()
{
Father_Class * fc = new Sub1;
fc->template_method();
delete fc;
fc = new Sub2;
fc->template_method();
delete fc;
fc = nullptr;
return 0;
}