模板方法模式Template

模板方法模式

在一个方法中,定义一个算法的骨架,而将一个些步骤延迟到子类中。
模板方法使得子类在不改变算法结构的情况下,重新定义一些算法中的某些步骤。

创建一个算法的模板,模板就是一个方法,在方法中将算法定义成一组步骤。其中任何步骤都可以是抽象的,由子类负责实现。
使得 模板方法本身 和 模板中操作的具体实现 解耦。
这里写图片描述

class CaffeinBeverage{
     virtual void prepareRecipe() final{
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }
    virtual void brew()=0;
    virtual void addCondiments()=0;
    void boilWater(){
        cout << "Boiling water" << endl;
    }
    void pourInCup(){
        cout << "pour Into Cup" << endl;
    }
};

class Coffe : public CaffeinBeverage{
public:
    void brew(){ // brewCoffeeGrinds(){   
        cout << "Dripping Coffee through filter" << endl;
    }
    void addCondiments(){ // addSugarAndMilk(){   
        cout << "Adding Sugar and Milk" << endl;
    }
};

class Tea : public CaffeinBeverage{
public:
    void brew(){ // steepTeaBag(){    
        cout << "Steeping the tea" << endl;
    }
    void addCondiments(){ // addLemon(){   
        cout << "Pouring into cup" << endl;
    }
};

钩子作为条件控制:

class CaffeinBeverageWithHook{
public:
    void prepareRecipe() final{
        boilWater();
        brew();
        pourInCup();
        if(customerWantsCondiments()) addCondiments();
    }

    bool customerWantsCondiments(){            // 钩子
        cout << "Would you like milk and sugar with your coffee(Y/N)"<< endl;
        char yesOrNo = 'N';
        cin >> yesOrNo;
`
    if(yesOrNo == 'Y')
            return true;
        return false;
    }
};

通过继承的方式复用代码, 并保持对算法的控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值