ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【c++设计模式】建造者模式

2019-12-07 11:00:31  阅读:290  来源: 互联网

标签:NULL Juice void 建造 c++ public juice 设计模式 maker


创建型模式

4)建造者模式

一共涉及到三个类:产品类,建造者类,用户类

  • 产品类:非抽象类。就是指某种产品,产品有一些属性待设定
  • 建造者类:需要构造抽象类,来扩展出各种各样的建造者类,每一种产品对应着一种建造者类。并且建造类能够直接生产产品类(能够 new product())
  • 用户类:非抽象类。用户调用不同的建造者类去建造,并且得到相应的产品。用户类和产品类没有直接的关系。

优点:将一个复杂对象的构造和它的表示分离。这样易于扩展。
缺点:如果构建发生变化,所有的建造者都要变化。

//产品类,果汁
class Juice{
public:
    Juice(){}
    void setVolume(double v){
        m_volume = v;
    }
    void setColor(string color){
        m_color = color;
    }
    
private:
        double m_volume;
    string m_color;
}

//建造者抽象类
class Maker{
public:
        Maker():p_juice(NULL){}
    void createJuice(){
        if(p_juice==NULL)
            p_juice = new Juice();
    }
    Juice* getJuice(){
        return p_juice;
    }
    
    virtual void squeezeVolume() = 0;
    virtual void mixColor() = 0;
    
private:
    Juice* p_juice;
}

class GrapeJuiceMaker : public Maker{
public:
    void squeezeVolome(){
        p_juice->setVolume(1000);
    }
  
    void mixColor(){
        p_juice->setColor("Purple");
    }
}

class AppleJuiceMaker: public Maker{
public:
    void squeezeVolome(){
        if(p_juice!=NULL)
                p_juice->setVolume(500);
    }
  
    void mixColor(string color){
        if(p_juice!=NULL)
            p_juice->setColor("Green");
    }
}

//用户类
class Worker{
public:
    Worker():m_maker(NULL){}
    void setMaker(Maker* m){
        m_maker = m;
    }
    Juice* makeJuice{
        if(m_maker==NULL)
            return NULL;
        m_maker->createJuice();
        m_maker->squeezeVolume();
        m_maker->mixColor();
      
        pjuice = m_maker->getJuice();
        return pjuice;
    }
private:
    Maker* m_maker;
}

int main(){
  
        Worker* w = new Worker(); //定义工人
    AppleJuiceMaker* maker1 = new AppleJuiceMaker(); //定义机器
    Juice* a1 = w.makeJuice(); //就能直接得到果汁
}

本文参考

https://www.jianshu.com/p/8c97cdae98b1

标签:NULL,Juice,void,建造,c++,public,juice,设计模式,maker
来源: https://www.cnblogs.com/corineru/p/12000934.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有