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;
    }
  • 相关阅读:
    关于SuperSocket启动失败
    ffmpeg 常用命令
    Url中有中文参数需要编码解码
    单例模式
    c# 文件夹重命名
    一个既有winform又有webapi 的例子
    数据库查询字段的结构和长度
    Jquery 展开收起
    ajax即时修改
    EFCore 迁移
  • 原文地址:https://www.cnblogs.com/osbreak/p/10116851.html
Copyright © 2011-2022 走看看