对所有组件统一封装,并按一定的顺序组装使用
#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] 举报,一经查实,本站将立刻删除。