Builder模式要解决的问题是,当我们要创建很复杂的对象时,有时候需要将复杂对象的创建过程和这个对象的表示分离开来。由于在每一步的构造过程中可以映入不同参数,所以步骤相同但是最后的对象却不一样。也就是说将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
Builder模式的关键在于在创建一个复杂对象时,其组合过程往往涉及复杂的处理,同时,这种职责的分离使得修改复杂对象的组合逻辑变得独立而简单。
Builder模式的典型结构图为:

代码如下:
- #include<iostream>
- using namespace std;
- class PCBuilder
- {
- public:
- virtual void prepareMonitor()=0;
- virtual void prepareCpu()=0;
- virtual void prepareDisk()=0;
- PCBuilder *GetProduct(){return product;}
- private:
- PCBuilder *product;
- };
- class CheapPCBuilder:public PCBuilder
- {
- public:
- void prepareMonitor()
- {cout<<"cheap"<<endl;}
- void prepareCpu()
- {}
- void prepareDisk()
- {}
- };
- class DearPCBuilder:public PCBuilder
- {
- public:
- void prepareMonitor()
- {cout<<"Dear"<<endl;}
- void prepareCpu()
- {}
- void prepareDisk()
- {}
- };
- class Director
- {
- public:
- void construct(PCBuilder* builder)
- {
- builder->prepareMonitor(); //一般来说,程序员可以在此处传入参数,本程序省略。
- builder->prepareCpu();
- builder->prepareDisk();
- }
- };
- void main()
- {
- Director* dir;
- PCBuilder* pd=new DearPCBuilder();
- dir->construct(pd);
- }