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 只提供一个构造的流程.

posted @ 2013-01-17 10:40  walfud  阅读(133)  评论(0编辑  收藏  举报