微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐