设计模式-建造者模式

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它主要适用于创建一些复杂的对象,这些对象内部构造间的构造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式是当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方法时适用的设计模式。

UML图如下:



相关类代码如下:

// Builder.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Product
{
	vector<string> parts;
public:
	void Add(string part)
	{
		parts.push_back(part);
	}

	void Show(void)
	{
		cout<<"------产品创建------"<<endl;
		vector<string>::const_iterator pos;
		for(pos=parts.begin();pos!=parts.end();++pos)
		{
			cout<<*pos<<endl;
		}
	}
};

class Builder
{
protected:
	Product m_product;
public:
	virtual void BuildPartA()=0;
	virtual void BuildPartB()=0;
	Product GetResult(void)
	{
		return m_product;
	}
};

class ConcreteBuilder1:public Builder
{
public:
	void BuildPartA()
	{
		m_product.Add("A");
	}
	void BuildPartB()
	{
		m_product.Add("B");
	}
};

class ConcreteBuilder2:public Builder
{
public:
	void BuildPartA()
	{
		m_product.Add("X");
	}
	void BuildPartB()
	{
		m_product.Add("Y");
	}
};

class Director
{
public:
	void Construct(Builder &builder)
	{
		builder.BuildPartA();
		builder.BuildPartB();
	}
};

int main(int argc, char* argv[])
{
	Director director;
	ConcreteBuilder1 b1;
	ConcreteBuilder2 b2;

	director.Construct(b1);
	Product prodect=b1.GetResult();
	prodect.Show();

	director.Construct(b2);
	prodect=b2.GetResult();
	prodect.Show();
	return 0;
}

程序分析:Director是指挥者,他用来控制Product对象的构建过程。Builder提供了构建Product的接口。ConcreteBuilder1、ConcreteBuilder2实现了构建Product的方法。Product的构建方法(m_product.Add(string part))独立于其组成部分(BuildPartA、BuildPartB)以及装配方法(先执行BuildPartA在执行BuildPartB),并且其构建过程(先执行BuildPartA在执行BuildPartB)是稳定的(由Director来控制)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值