builder模式

对所有组件统一封装,并按一定的顺序组装使用

#include <cstdlib>
#include <iostream>

using namespace std;
class Sql
{
public:
  virtual ~Sql(){cout<<"Sql 基类析构"<<endl;}
  virtual void Do() = 0;
};
class SqlAccess:public Sql
{
public:
  virtual ~SqlAccess(){cout<<"SqlAccess 析构"<<endl;}
  virtual void Do(){cout<<"Access 牌车轮"<<endl;}
};
class SqlServer:public Sql
{
public:
  virtual ~SqlServer(){cout<<"SqlServer 析构"<<endl;}
  virtual void Do(){cout<<"SqlServer 牌车轮"<<endl;}
};
class Department
{
public:
  virtual ~Department(){cout<<"Department 基类析构"<<endl;}
  virtual void Did() = 0;
};
class DepartmentAccess:public Department
{
public:
  virtual ~DepartmentAccess(){cout<<"DepartmentAccess 析构"<<endl;}
  virtual void Did(){cout<<"DepartmentAccess 牌油箱"<<endl;};
};
class DepartmentServer:public Department
{
public:
  virtual ~DepartmentServer(){cout<<"DepartmentServer 析构"<<endl;}
  virtual void Did(){cout<<"DepartmentServer 牌油箱"<<endl;};
};
class Builder
{
public:
  virtual ~Builder(){cout<<"Builder 基类析构"<<endl;}
  virtual Sql* BuilderSql() = 0;
  virtual Department* BuilderDepartment() = 0;
};
class BuilderAccess:public Builder
{
public:
  virtual ~BuilderAccess(){cout<<"BuilderAccess 析构"<<endl;}
  virtual Sql* BuilderSql(){return new SqlAccess;}
  virtual Department* BuilderDepartment(){return new DepartmentAccess;}
};
class BuilderServer:public Builder
{
public:
  virtual ~BuilderServer(){cout<<"BuilderServer 析构"<<endl;}
  virtual Sql* BuilderSql(){return new SqlServer;}
  virtual Department* BuilderDepartment(){return new DepartmentServer;}
};
class Director
{
  Builder* pBui;
  Sql* pSql;
  Department* pDep;
public:
  Director(Builder* p){pBui = p;}
  ~Director()
  {
    delete pBui;
    delete pSql;
    delete pDep;
  }
  void Construct()
  {
    pSql = pBui->BuilderSql();
    pDep = pBui->BuilderDepartment();
  }
  void Process()
  {
    pSql->Do();
    pDep->Did();
  }
};
//生产摩托车的步骤是一样的
void Product(Director* pDir)
{
 pDir->Construct();
 pDir->Process();
}
int main(int argc, char *argv[])
{
    //造一辆ACCESS牌的摩托车
    cout<<"---------------------造一辆ACCESS牌的摩托车"<<endl;
    Director* pDir = new Director(new BuilderAccess);
    Product(pDir);
    cout<<"---------------------清理制造ACCESS摩托车产生的垃圾"<<endl;
    delete pDir;
    //造一辆Server牌的摩托车
    cout<<"---------------------造一辆Server牌的摩托车"<<endl;
    pDir = new Director(new BuilderServer);
    Product(pDir);
    cout<<"---------------------清理制造Server摩托车产生的垃圾"<<endl;
    delete pDir;
    system("PAUSE");
    return EXIT_SUCCESS;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值