设计模式——建造者模式_Builder Pattern

建造者模式(或生成器模式)定义:

Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)


UML类图:



C++代码实例:

#include <iostream>
#include <string>
using namespace std;

class Product {
public:
	void Run() { cout << "建造完毕,并且用户已经获得产品指针或对象" << endl; }
};

class ConcreteProduct : public Product {
	//产品类不需要抽象
};

class Builder {
public:
	virtual void BuildPartA(string& partA) = 0;
	virtual void BuildPartB(string& partB) = 0;
	virtual void BuildPartC(string& partC) = 0;
	virtual Product* GetProduct() = 0;
};

class ConcreteBuilder : public Builder {
public:
	ConcreteBuilder() { 
		if (_pProduct==NULL)
			_pProduct = new ConcreteProduct;
	}

	ConcreteProduct* GetProduct() {
		return _pProduct;
	}

	void BuildPartA(string& partA){ cout << "建造第一步:"<< partA << endl; }
	void BuildPartB(string& partB){ cout << "建造第二步:"<< partB << endl; }
	void BuildPartC(string& partC){ cout << "建造第三步:"<< partC << endl; }

private:
	ConcreteProduct* _pProduct;
};

class Director {
public:
	Director(Builder* bld){ _bld = bld; }

	Product* ConstructProduct() {
		_bld->BuildPartA(string("用户自定义1"));
		_bld->BuildPartB(string("用户自定义2"));
		_bld->BuildPartC(string("用户自定义3"));
		return _bld->GetProduct();
	}

private:
	Builder* _bld;
};
#include "Builder.h"

int main()
{
	
	Director *pDictor = new Director(new ConcreteBuilder());
	Product* pProduct =  pDictor->ConstructProduct();
	pProduct->Run();

	return 0;
}

建造者模式最主要的功能是基本方法的调用顺序安排。



需要区别建造者模式和抽象工厂模式。

Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在AbstractFactory 模式中对象是直接返回的,AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个同一的接口。


再区别下建造者模式和模板方法模式。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值