设计模式(8)——建造者模式

建造者模式

将一个复杂的对象的构建与它的具体表示相隔离,使得同样的构建过程可以创建 不同的复杂的对象

角色扮演

抽象建造者(Builder)

为创建一个产品对象的各个部件指定的抽象接口

具体建造者类(ConcreteBuilder)

实现Builder的接口来构造和装配该产品的各个部件,定义并明确所创建的表示,并提供一个检索产品的接口

指挥建筑者类(DirectorBuiler)

构造一个实用Builder接口的对象

具体的复杂对象类(Product)

表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

举例说明

小王去电脑城买一台组装电脑,对于小王来讲我只需要一台他所需要的电脑,而不关乎其电脑的构造过程,只需要把小王指定的电脑表现出来即可,电脑本身是一个实体,而建造者看来是一个复杂的对象

class Builder
{
  public:
    Builder();
    virtual ~Builder();
    virtual void cpu()= 0;
    virtual void memeory()=0;
    virtual void disk()=0;
    virtual void mainboard()=0;
    virtual void crate()=0;
    virtual void display_board()=0;
    virtual void power()=0;
  protected:
  private:
};

class ConcreteBuilder : public Builder
{
  public:
    ConcreteBuilder();
    virtual ~ConcreteBuilder();
    void crate(){
      cout<<"制冷机箱全面升级"<<endl;
    }
    void mainboard(){
      cout<<"主板是Z370超频主板"<<endl;
    }
    void cpu(){
      cout<<"采用英特尔酷睿i7八代处理器-i7-8700k"<<endl;
    }
    void memeory(){
      cout<<"内存容量16G,最大32G"<<endl;
    }
    void disk(){
      cout<<"512G固态硬盘,2Tb的机械硬盘"<<endl;
    }
    void display_board(){
      cout<<"独显RTX2080Ti 11G"<<endl


class DirectorBuilder
{
  public:
    DirectorBuilder();
    virtual ~DirectorBuilder();
    void createProduct(Builder& be){
      be.crate();
      be.mainboard();
      be.cpu();
      be.display_board();
      be.memeory();
      be.disk();
      be.power();
    }
  protected:
  private:
};


class Product
{
  public:
    Product();
    virtual ~Product();
    void show(DirectorBuilder &dire,Builder& be){
        dire.createProduct(be);
    }
  protected:
  private:

};

demo:

int main(){
    DirectorBuilder direc;  
    ConcreteBuilder cb;    
    Product *pro =new Product();  
    return 0;
}

结果:

 

优点

1:建造者独立,易扩展

2.:无需关系复杂对象的建造过程,可以具体表现出来

3:便于控制细节风险

缺点

1.产品必须有共同点,范围因此有限制

2.如背部变化复杂,则可能具有很多的建造类,使其内部更复杂化

应用场景

需要生产的对象,内部具有复杂的结构

需要生产的对象,内部属性本身具有相互的联系,依赖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值