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;
    }
  • 相关阅读:
    Introduction to Machine Learning
    IEEE 802.3 Ethernet
    Introduction to Computer Networks(网络架构与七层参考模式)
    Integral类型的跨平台使用
    Aggregate类型以及值初始化
    合成的默认构造函数定义为delete的一种情况(针对C++11标准)
    版本控制工具Git
    编程实现计算器
    Linux客户/服务器程序设计范式2——并发服务器(进程池)
    Linux客户/服务器程序设计范式1——并发服务器(多进程)
  • 原文地址:https://www.cnblogs.com/osbreak/p/10116851.html
Copyright © 2011-2022 走看看