程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用代碼和UML圖化解設計模式之《創建者模式》

用代碼和UML圖化解設計模式之《創建者模式》

編輯:C++入門知識

今天學習了建造者模式,目前較為復雜的一個模式之一。但是思考起來就覺得她很像抽象工廠的生產者模式。

 

但是比生產者多了一個導演著的身份,這個指揮著建造者去生產誰。。。

 

所以,這個模式還是挺有意思的。直接上UML圖。

 

 

我們生產兩種商品,兩種商品是有廠家決定,商品只決定具有哪些。因此,這時候是有生產者說了算。

 

但是還有一個更高級的指揮者,那就是 導演類。安排生產。

 

好了直接上代碼,大家自己看吧

 

 

[cpp] 
// Builder.cpp : 定義控制台應用程序的入口點。 
// 
//************************************************************************/     
/* @filename    Builder.cpp
@author       wallwind  
@createtime    2012/10/23 23:35
@function     建造者模式
@email       [email protected]  
*/     
/************************************************************************/    
 
#include "stdafx.h" 
#include <iostream> 
#include <vector> 
#include<string> 
 
using namespace std; 
 
class Product 

public: 
    Product() 
    { 
        m_part = new vector<string>; 
    } 
    virtual ~Product() 
    { 
        if (m_part) 
        { 
            delete m_part; 
        } 
    } 
 
    void addPart(string part) 
    { 
        m_part->push_back(part); 
    } 
 
    void showPro() 
    { 
        vector<string>::iterator it = m_part->begin(); 
        for(;it!=m_part->end();it++) 
            cout<<*it<<endl; 
    } 
private: 
    vector<string> *m_part; 
 
}; 
 
class Builder 

public: 
    Builder(){} 
    virtual ~Builder(){} 
 
    virtual void BuildPartA(){} 
    virtual void BuildPartB(){} 
 
    virtual Product* getProduct() const 
    { 
        return NULL; 
    } 
     
 
}; 
 
 
class ConcreteBuider1 : public Builder 

public: 
    ConcreteBuider1(){} 
    virtual ~ConcreteBuider1(){} 
    virtual void BuildPartA() 
    { 
        m_product->addPart("ConcreteBuider1:BuildPartA"); 
    } 
 
    virtual void BuildPartB() 
    { 
        m_product->addPart("ConcreteBuider1:BuildPartB"); 
    } 
 
    virtual Product* getProduct() const 
    { 
        return m_product; 
    } 
 
private : 
    Product * m_product; 
}; 
 
 
 
class ConcreteBuider2: public Builder 

public: 
    ConcreteBuider2(){} 
    virtual ~ConcreteBuider2(){} 
    virtual void BuildPartA() 
    { 
        m_product->addPart("ConcreteBuider2:BuildPartA"); 
    } 
 
    virtual void BuildPartB() 
    { 
        m_product->addPart("ConcreteBuider2:BuildPartB"); 
    } 
 
    virtual Product* getProduct() const 
    { 
        return m_product; 
    } 
 
private : 
    Product * m_product; 
}; 
 
class Director 

public: 
    Director(){} 
    ~Director(){} 
 
    void CreateProduct(Builder *build) 
    { 
        build->BuildPartA(); 
        build->BuildPartB(); 
    } 
 
}; 
int _tmain(int argc, _TCHAR* argv[]) 

 
    Builder *build1 =new ConcreteBuider1(); 
    Director director; 
 
    director.CreateProduct(build1); 
 
    Product* product1=build1->getProduct(); 
    product1->showPro(); 
 
    Builder *build2 =new ConcreteBuider2(); 
    director.CreateProduct(build2); 
 
    Product* product2=build2->getProduct(); 
    product2->showPro(); 
     
    return 0; 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved