当前位置:编程学习 > XML/UML >>

用代码和UML图化解设计模式之《创建者模式》

今天学习了建造者模式,目前较为复杂的一个模式之一。但是思考起来就觉得她很像抽象工厂的生产者模式。

 

但是比生产者多了一个导演着的身份,这个指挥着建造者去生产谁。。。

 

所以,这个模式还是挺有意思的。直接上UML图。

 

 

我们生产两种商品,两种商品是有厂家决定,商品只决定具有哪些。因此,这时候是有生产者说了算。

 

但是还有一个更高级的指挥者,那就是 导演类。安排生产。

 

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

 

 

[cpp] 
// Builder.cpp : 定义控制台应用程序的入口点。 
// 
//************************************************************************/     
/* @filename    Builder.cpp
@author       wallwind  
@createtime    2012/10/23 23:35
@function     建造者模式
@email       wochenglin@qq.com  
*/     
/************************************************************************/    
 
#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; 

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,