设计模式观后(c++还原之八 建造者模式)

//从前面的知识知道,重复功能函数放基类(视情况)run
//车辆模型抽象基类
class CarModel {
private:
    deque<string>* m_psequence;
    
protected:
    virtual void Start() = 0;
    virtual void Stop() = 0;
    virtual void Alarm() = 0;
    virtual void EngineBoom() = 0;
    
public:
    void run() {
        for (int i = 0; i < m_psequence->size(); i++) {
            string actionName = m_psequence->at(i);
            if (!actionName.compare("start")) {
                Start();
            } else if (!actionName.compare("stop")) {
                Stop();
            } else if (!actionName.compare("alarm")) {
                Alarm();
            } else if (!actionName.compare("engine boom")) {
                EngineBoom();
            }
        }
    }
    
    void SetSequence(deque<string>* sequence) {
        *m_psequence = *sequence;
    }
};

//派生奔驰模型类,和宝马模型类。重写虚函数OK!。()
class BenzModel : public CarModel {
public:
    BenzModel();
};
class BMWModel : public CarModel {
public:
    BMWModel();
};

//添加功能,现在来抽象功能基类组装者
class CarBuilder {
public:
    virtual void SetSequence(std::deque<string> sequence) {};
    virtual CarModel* GetCarModel() = 0;
    
};
class BenzBuilder : public CarBuilder {
private:
    BenzModel* pbenz;
public:
    CarModel* GetCarModel() {
        return pbenz;
    }
    void SetSequence(deque<string>* sequence) {
        pbenz->SetSequence(sequence);
    }
};
class BMWBuilder : public CarBuilder {
private:
    BMWModel* pbmw;
public:
    CarModel* GetCarMode() {
        return pbmw;
    }
    void SetSequence(deque<string>* sequence) {
        pbmw->SetSequence(sequence);
    }
};

class Client {
    static void main() {
        //调用奔驰类
        deque<string>* sequece = new deque<string>();
        sequece->push_back("engine boom");
        sequece->push_back("start");
        
        BenzBuilder* pbenz = new BenzBuilder();
        pbenz->SetSequence(sequece);
        
        BenzModel* benz = (BenzModel*)pbenz->GetCarModel();
        benz->run();
    }
};
//先是产品类,像前面说的那样;构建产品抽象基类和产品实体派生类
//然后是建造者,(同上面的操作) 对实体类进行封装,返回组建好了的对象。
//最后的场景类,一望作者风格。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值