Design Pattern --- Builder
class Builder { protected: // data. string m_res; public: // Interface. virtual void buildPartA() = 0; virtual void buildPartB() = 0; virtual void buildPartC() = 0; string getRes() { return m_res; } }; class BuilderA : public Builder { public: virtual void buildPartA() override { m_res += "BuilderA::BuildPartA\n"; } virtual void buildPartB() override { m_res += "BuilderA::BuildPartB\n"; } virtual void buildPartC() override { m_res += "BuilderA::BuildPartC\n"; } }; class BuilderB : public Builder { public: virtual void buildPartA() override { m_res += "BuilderB::BuildPartA\n"; } virtual void buildPartB() override { m_res += "BuilderB::BuildPartB\n"; } virtual void buildPartC() override { m_res += "BuilderB::BuildPartC\n"; } }; class Director { public: void construct(Builder &builder) { builder.buildPartA(); builder.buildPartB(); builder.buildPartB(); cout <<builder.getRes(); } }; int main(int argc, char *argv[]) { Director d; BuilderA ba; // BuilderB bb; d.construct(ba); return 0; }
此模式之所以有一个 Director, 就是因为 Director 不直接产生结果, 而是委托给 Builder 去构造目标。因此, 适用于构造比较复杂的对象.
将目标的子部件构实体程独立到 Builder 的子类中。Directory 只提供一个构造的流程.