【设计模式】模板方法

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++中没有区分接口和继承,所以理解起来有点别扭。实际上模板类和其实现,可能完全没有继承关系。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值