zoukankan      html  css  js  c++  java
  • 设计模式 之 《建造者模式(Builder)》

    #ifndef __BUILDER_MODEL__
    #define __BUILDER_MODEL__
    
    #include <string>
    #include <vector>
    #include <iostream>
    using namespace std;
    
    class Product
    {
    private:
        vector<string> m_product;
    public:
        void add(string strtemp)
        { 
            m_product.push_back(strtemp); 
        }
        void show()
        {
            vector<string>::iterator iter = m_product.begin();
            while (iter!=m_product.end())
            {
                cout<<*iter<<endl;
                ++iter;
            }
        }
    };
    
    class Builder
    {
    public:
        virtual void builderA() = 0;
        virtual void builderB() = 0;
        virtual Product* getResult() = 0;
    };
    
    class ConcreteComponentA : public Builder
    {
    private:
        Product* m_product;
    public:
        ConcreteComponentA(){ m_product = new Product(); }
        void builderA(){ m_product->add("one"); }
        void builderB(){ m_product->add("two"); }
        Product* getResult(){ return m_product; }
    };
    
    class ConcreteComponentB : public Builder
    {
    private:
        Product* m_product;
    public:
        ConcreteComponentB(){ m_product = new Product(); }
        void builderA(){ m_product->add("1"); }
        void builderB(){ m_product->add("2"); }
        Product* getResult(){ return m_product; }
    };
    
    //指挥者
    class Direct
    {
    public:
        void conrete(Builder* pBuilder)
        {
            pBuilder->builderA();
            pBuilder->builderB();
        }
    };
    
    #endif //__BUILDER_MODEL__
    
    
    //《客户端》
    /*
    #include "BuilderModel.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    Direct* direct = new Direct();
    Builder* pb1 = new ConcreteComponentA();
    Builder* pb2 = new ConcreteComponentB();
    
    direct->conrete(pb1);
    Product* p1 = pb1->getResult();
    p1->show();
    
    direct->conrete(pb2);
    Product* p2 = pb2->getResult();
    p2->show();
    
    return 0;
    }
    */
  • 相关阅读:
    centos7+php7.1.4+mysql5.7+swoole搭建
    鄙视自己(转)
    Mysql的sql优化概念---三大范式
    PHP的设计模式-单例设计
    Composer的安装使用
    PHPstorm的一些快捷键
    论代码走查的重要性
    Java泛型读书笔记 (三)
    Java泛型读书笔记 (一)
    Java泛型读书笔记 (二)
  • 原文地址:https://www.cnblogs.com/MrGreen/p/3413825.html
Copyright © 2011-2022 走看看