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

         建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式

         建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图,以建造小人为实例。


              对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。下面给出小人例子的代码实现。

    [cpp] view plain copy print?
    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 head"<<endl; }  
        void BuildBody() { cout<<"build thin body"<<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 main()  
    {  
        FatBuilder Fat;  
        Director director(&Fat);  
        director.Create();  
        return 0;  
    }  


    关注公众号 海量干货等你
  • 相关阅读:
    第六章:单元测试框架unittest
    Jenkins 使用 war包安装时,如果出现报离线错误解决方法
    Appium自动化封装教案
    yaml文件读取(5.1之前与5.1之后对比)
    appium-desktop配置运用方法
    postwoman 配置
    jwt解析
    pytest
    centos安装python3.8
    linux 查找命令
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734432.html
Copyright © 2011-2022 走看看