您的位置:首页 > 编程语言

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

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

 

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

 

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



 

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

 

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

 

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

 

 

// 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;
}


 

ok 今天就到这里。。。。继续学习

 

更多文章,欢迎访问:

http://blog.csdn.net/wallwind

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: