zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式(Builder Pattern),旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    模式结构
    Builder 抽象建造者
    ConcreteBuilder 具体建造者
    Director指挥者
    Product产品
    优点:
    建造者独立,易于扩展
    便于控制细节风险
    缺点:
    产品必须有共同点,范围有限制
    如果内部变化复杂,将会有很多的建造类
    //基类, 拥有共同的方法
    class Builder  
    {
    public:
     virtual void BuildHead() {}
     virtual void BuildBody() {}
     virtual void BuildLeftArm(){}
     virtual void BuildRightArm() {}
     virtual void BuildLeftLeg() {}
     virtual void BuildRightLeg() {}
    };
    //构造瘦子,具体产品
    class ThinBuilder : public Builder
    {
    public:
        void BuildHead() { cout<<"build thin body"<<endl; }
        void BuildBody() { cout<<"build thin head"<<endl; }
        void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
        void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
        void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
        void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
    };
    //构造胖子
    class FatBuilder : public Builder
    {
    public:
        void BuildHead() { cout<<"build fat body"<<endl; }
        void BuildBody() { cout<<"build fat head"<<endl; }
        void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
        void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
        void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
        void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
    };
    //构造的指挥官
    class Director  
    {
    private:
        Builder *m_pBuilder;
    public:
        Director(Builder *builder) { m_pBuilder = builder; }
        void Create(){
            m_pBuilder->BuildHead();
            m_pBuilder->BuildBody();
            m_pBuilder->BuildLeftArm();
            m_pBuilder->BuildRightArm();
            m_pBuilder->BuildLeftLeg();
            m_pBuilder->BuildRightLeg();
        }
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
        FatBuilder *fat= new FatBuilder();
        Director *director = new Director(fat);
        director->Create();  
        return 0;
    }
  • 相关阅读:
    生成8位随机字符串
    Python字符串反转
    dd备份文件系统
    多线程mtr-代码
    Sysctl命令及linux内核参数调整
    解决系统存在大量TIME_WAIT状态的连接
    tcpkill清除异常tcp连接
    graphite
    sed 中带变量的情况
    JAVA的Random类
  • 原文地址:https://www.cnblogs.com/osbreak/p/10116851.html
Copyright © 2011-2022 走看看