【C++設(shè)計(jì)模式】模板方法 之 打豆?jié){

/* 小魚號(hào)的代碼日志
 * 設(shè)計(jì)模式
 * 模板方法
 * 現(xiàn)實(shí)例子:
 * 打豆?jié){的步驟
 *  1 選原料,2加配料,3浸泡,4打磨
 * 原味豆?jié){ 什么都不加
 * 紅豆豆?jié){ 需要加紅豆
 * 花生豆?jié){ 需要加花生
 * ...
 * 加了不同的配料浸泡時(shí)間可能不同。。
*/

#include<iostream>
using namespace std;

//抽象的豆?jié){
class AbsSoyaMilk
{
public:
    //制作豆?jié){
    void make()
    {
        select();
        add();
        soak();
        beat();
    }
protected:
    virtual void add() = 0; //2加配料
    virtual void soak() = 0; //3 浸泡
private:
    //1選原料
    void select()
    {
        cout << "select perfect soybeab" << endl;
    }
    //4打豆?jié){
    void beat()
    {
         cout << "start beat soyamilk" << endl;
    }
};

//原味豆?jié){
class OriginalSoyaMilk : public AbsSoyaMilk
{
    void add()
    {
        cout << "add nothing " << endl;
    }
    void soak()
    {
        cout << "soak 1 hour " << endl;
    }
};

//紅豆豆?jié){
class RedBeansSoyaMilk : public AbsSoyaMilk
{
    void add()
    {
        cout << "add read beans " << endl;
    }
    void soak()
    {
        cout << "soak 1.5 hour " << endl;
    }
};

//花生豆?jié){
class PeanutSoyaMilk : public AbsSoyaMilk
{
    void add()
    {
        cout << "add Peanut " << endl;
    }
    void soak()
    {
        cout << "soak 1.8 hour " << endl;
    }
};

void testTemplateMethod()
{
    cout << "TemplateMethod:" << endl;
    AbsSoyaMilk* soya = new OriginalSoyaMilk;
    cout << "make Original soyamilk" << endl;
    soya->make();

    cout << "=========================" << endl;
    cout << "make readbeans soyamilk" << endl;
    soya = new RedBeansSoyaMilk;
    soya->make();

    cout << "=========================" << endl;
    cout << "make peanut soyamilk" << endl;
    soya = new PeanutSoyaMilk;
    soya->make();
}



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容