C++设计模式

【C++设计模式】模板方法 之 打豆浆

2021-02-27  本文已影响0人  小鱼号的代码日记
/* 小鱼号的代码日志
 * 设计模式
 * 模板方法
 * 现实例子:
 * 打豆浆的步骤
 *  1 选原料,2加配料,3浸泡,4打磨
 * 原味豆浆 什么都不加
 * 红豆豆浆 需要加红豆
 * 花生豆浆 需要加花生
 * ...
 * 加了不同的配料浸泡时间可能不同。。
*/

#include<iostream>
using namespace std;

//抽象的豆浆
class AbsSoyaMilk
{
public:
    //制作豆浆
    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打豆浆
    void beat()
    {
         cout << "start beat soyamilk" << endl;
    }
};

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

//红豆豆浆
class RedBeansSoyaMilk : public AbsSoyaMilk
{
    void add()
    {
        cout << "add read beans " << endl;
    }
    void soak()
    {
        cout << "soak 1.5 hour " << endl;
    }
};

//花生豆浆
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();
}



上一篇 下一篇

猜你喜欢

热点阅读