【设计模式】模板方法

来源:互联网 发布:淘宝客户关系管理导出 编辑:程序博客网 时间:2024/05/16 10:51

Template方法模式,与c++的模板没有直接关系。或者可以认为这里的template是针对方法(函数)来说的,而c++的template则是针对成员变量或者参数来讲的。字面意思有一些关系。

template method主要是通过在父类中定义一个模板,子类中实现该模板中的个性化部分。实现了固定部分和变化部分的解耦。模板方法本身比较简单。其目的就是为了共享一些公共部分,提升代码复用性。

简单写了一个demo,很简单。参考了下面的blog,主要是觉得例子举得很贴切:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/10/2584272.html

#include <iostream>using namespace std;class TestPaper{    public:        TestPaper(){}        ~TestPaper(){}        void Question1(){            cout<<"1+1=?"<<endl;        }        void Question2(){            cout<<"什么是模板方法?"<<endl;        }        void Process(){            Question1();            DoAnswer1();            Question2();            DoAnswer2();        }    protected:        virtual void DoAnswer1() = 0;        virtual void DoAnswer2() = 0;};class StuA : public TestPaper{    public:        StuA(){}        ~StuA(){}        virtual void DoAnswer1(){            cout<<"StuA:"<<"2!"<<endl;        }        virtual void DoAnswer2(){            cout<<"StuA:模板方式是一种设计模式。与模板可不是一回事儿哦!"<<endl;        }};class StuB : public TestPaper{    public:        StuB(){}        ~StuB(){}        virtual void DoAnswer1(){            cout<<"StuB:3!"<<endl;        }        virtual void DoAnswer2(){            cout<<"StuB:模板方式就是父类先确定逻辑框架,把确定的流程,操作等固化到父类,将一些个性化的操作留给子类去实现。这个思想叫'好莱坞法则':别找我们,我们找你。对应到模板方法,父类调用子类的操作,而不是相反。"<<endl;        }};int main(){    StuA * stuA = new StuA();    stuA->Process();    StuB * stuB = new StuB();    stuB->Process();    return 0;}

模板方法,比较简单,且很好理解。本身模板方法更像一个纯接口。而不是一个类。在C++中没有区分接口和继承,所以理解起来有点别扭。实际上模板类和其实现,可能完全没有继承关系。

另外,模板方法,也可以有一些默认操作。从而降低子类的负担。


原创粉丝点击