C++设计模式--模板方法模式解析(head first 设计模式C++实现)

模板方法模式

  1. 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的一些步骤。
  2. 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现
  3. 模板方法的抽象类可以定义具体方法,抽象方法和钩子,抽象方法由子类实现,钩子是一种方法,它在抽象类中不做事,或者只做默认的事,子类可以选择要不要去覆盖它。
  4. 模板方法中涉及的设计原则:好莱坞原则,别调用我们,我们会调用打电话给你。

模式叙述
模板方法封装可互换的行为,然后使用委托来决定要采用哪一个行为
策略子类决定如何实现算法中的步骤
工厂方法由子类决定实例化那个具体子类

例子

在这里插入图片描述
在这里插入图片描述


class CaffeineBeverage{

    public:
    ~CaffeineBeverage(){}
    virtual void prepareRecipe(){
        boilWater();
        brew();
        pourIncup();
        if(isAddCondiments()){  //钩子用来改变算法中的步骤 可以由子类重定义
            addCondiments();
        } 
    }
    protected:
    void boilWater(){
        cout<<" add boil water"<<endl;
    }
    virtual  void brew()=0;
    void pourIncup(){
        cout<<"pour beverage in cup "<<endl;
    };
    virtual void addCondiments()=0;

    bool isAddCondiments(){
        char ans;
        cout<<" Add condiments? Y/N "<<endl;
        cin>>ans;
        if(ans=='Y'){
            return true;
        }

        return false;
    }

}; 

class Tea:public CaffeineBeverage{

    private:
        virtual  void brew(){
            cout<<" steeping the tea"<<endl;
        }
        virtual void addCondiments(){
            cout<<"Adding Lemon"<<endl;
        }

};

class Coffee:public CaffeineBeverage{

    private:
        virtual  void brew(){
            cout<<" Dripping Coffe through filter"<<endl;
        }
        virtual void addCondiments(){
            cout<<"Adding Sugar and Milk"<<endl;
        }
};


int main(){

CaffeineBeverage* beverage = new Tea;
beverage->prepareRecipe();
cout<<endl;
beverage = new Coffee;
beverage->prepareRecipe();
system("pause");
return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值