個人總結:
建造者模式是基於這樣的思想——建造者知道如何?各個部分(Builder類 中成員函數的實現),這些部分是組成產品的工序的分割,需要一個統一的調度者來指定完成生產的工序,並指揮建造者去執行建造(Director類的調度函數ConstructBuilding中指定了Builder類中成員函數PartialConstructA、PartialConstructB的執行順序)。
啥也不說了,上代碼
【Builder基類】
class Builder{public: Builder(void); virtual ~Builder(void); virtual void PartialConstructA(void) = 0; virtual void PartialConstructB(void) = 0;};Builder::Builder(void){}Builder::~Builder(void){ }
【具體的兩個建造者類】
class BuilderOne : public Builder{public: BuilderOne(void); ~BuilderOne(void); void PartialConstructA(void); void PartialConstructB(void);};BuilderOne::BuilderOne(void){ }BuilderOne::~BuilderOne(void){ }void BuilderOne::PartialConstructA(void){ std::cout << "====BuilderOne::PartialConstructA====\n";}void BuilderOne::PartialConstructB(void){ std::cout << "====BuilderOne::PartialConstructB====\n";}
class BuilderTwo : public Builder{public: BuilderTwo(void); ~BuilderTwo(void); void PartialConstructA(void); void PartialConstructB(void);};BuilderTwo::BuilderTwo(void){ }BuilderTwo::~BuilderTwo(void){ }void BuilderTwo::PartialConstructA(void){ std::cout << "====BuilderTwo::PartialConstructA====\n";}void BuilderTwo::PartialConstructB(void){ std::cout << "====BuilderTwo::PartialConstructB====\n";}
【調度者類Director】
class Director{public: Director(void); ~Director(void); void ConstructBuilding(Builder* builder);};Director::Director(void){ }Director::~Director(void){ }void Director::ConstructBuilding(Builder *builder){ //按照既定的順序執行建造 builder->PartialConstructA(); builder->PartialConstructB();}
【main】
int main(int argc, const char * argv[]){ BuilderOne* builderOne = new BuilderOne(); BuilderTwo* builderTwo = new BuilderTwo(); Director* director = new Director(); director->ConstructBuilding(builderOne); director->ConstructBuilding(builderTwo); delete builderOne; builderOne = NULL; delete builderTwo; builderTwo = NULL; delete director; director = NULL; return 0;}
【結果】
====BuilderOne::PartialConstructA====
====BuilderOne::PartialConstructB====
====BuilderTwo::PartialConstructA====
====BuilderTwo::PartialConstructB====