码迷,mamicode.com
首页 > 其他好文 > 详细

建造者模式

时间:2014-05-24 20:49:48      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:c++ 设计模式

      建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
      建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们使用了建造者模式,那么用户就只需指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。
bubuko.com,布布扣
Product就是具体产品类,由多个部件组成。
Builder是为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder是具体的建造者,实现Builder的接口,构造和装配各个部件。
指挥者Director就是根据需求的具体建造步骤。

建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

代码:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Product
{
private:
	std::string _partA;
	std::string _partB;
	std::string _partC;
public:
	void SetPartA(const string& partA)
	{
		cout << "Product:A" << endl;
		_partA = partA;
	}
	void SetPartB(const string& partB)
	{
		cout << "Product:B" << endl;
		_partB = partB;
	}
	void SetPartC(const string& partC)
	{
		cout << "Product:C" << endl;
		_partC = partC;
	}

};

class Builder
{
public:
	virtual void BuildPartA() = 0;
	virtual void BuildPartB() = 0;
	virtual void BuildPartC() = 0;
	virtual Product* GetProduct() = 0;
    Builder(){}
	virtual ~Builder(){}
};

class ConcreteBuilder :public Builder
{
private:
	Product* _pProduct;
public:
	ConcreteBuilder()
		:Builder()
	{
		_pProduct = new Product();
	}
	~ConcreteBuilder()
	{
		delete(_pProduct);
		_pProduct = NULL;
	}
	virtual void BuildPartA()
	{
		cout << "ConcreteBuilder:A" << endl;
		_pProduct->SetPartA("A");
	}
	virtual void BuildPartB()
	{
		cout << "ConcreteBuilder:B" << endl;
		_pProduct->SetPartB("B");
	}
	virtual void BuildPartC()
	{
		cout << "ConcreteBuilder:C" << endl;
		_pProduct->SetPartC("C");
	}

	virtual Product* GetProduct()
	{
		return this->_pProduct;
	}


};

class Director
{
private:
	Builder *_pBuilder;
public:
	~Director()
	{

	}
	Director(Builder* builder)
	{
		_pBuilder = builder;
	}
	void Construct()
	{
		_pBuilder->BuildPartA();
		_pBuilder->BuildPartB();
		_pBuilder->BuildPartC();
	}
};
// BuilderPattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Builder.h"


int _tmain(int argc, _TCHAR* argv[])
{
	Director *pDirector = new Director(new ConcreteBuilder());
	pDirector->Construct();

	getchar();
	return 0;
}



建造者模式,布布扣,bubuko.com

建造者模式

标签:c++ 设计模式

原文地址:http://blog.csdn.net/wwwdongzi/article/details/26683537

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!