建造者模式c++实现

#include<iostream>
#include<list>
using namespace std;

class Product{
public:
  void add(string s){
    l.push_back(s);
  };
  void show(){
    list<string>::iterator iter = l.begin();
    for(;iter != l.end();++iter){
      cout<<*iter<<endl;
    }
  };
private:
  list<string> l;
};

class Builder{
public:
  virtual void buildPartA() = 0;
  virtual void buildPartB() = 0;
  virtual Product * get() = 0;
};

class ConcreteBuilderA : public Builder{
public:
  ConcreteBuilderA(){p = new Product;};
  void buildPartA(){
    p->add("part A");
  };
  void buildPartB(){
    p->add("part B");
  };

  Product * get(){return p;};
private:
  Product * p;
};


class ConcreteBuilderB : public Builder{
public:
  ConcreteBuilderB(){p = new Product;};
  void buildPartA(){
    p->add("part X");
  };
  void buildPartB(){
    p->add("part Y");
  };
  Product * get(){return p;};
private:
  Product * p;
};

class Director{
public:
  Director(Builder * b):bb(b){};
  void build(){
    bb->buildPartA();
    bb->buildPartB();
  };
  void construct(Builder * bbb){bb = bbb;};
  Product * get(){return bb->get();};
private:
  Builder * bb;
};

int main(){
  Director * d = new Director(new ConcreteBuilderA);
  d->build();
  Product * p = d->get();
  p->show();
  d->construct(new ConcreteBuilderB);
  d->build();
  p = d->get();
  p->show();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值