现在的位置: 首页 > 综合 > 正文

设计模式之建造者模式

2013年08月22日 ⁄ 综合 ⁄ 共 1778字 ⁄ 字号 评论关闭

一,建造者模式与抽象工程模式很相似,区别:抽象工厂模式侧重一系列的产品复杂的建造;而建造者模式侧重一步一步建造复杂的产品,最终返回产品。

二,UML图解

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

                   参考:http://blog.csdn.net/wallwind/article/details/8105093                                                                                                                           

抱歉!评论已关闭.