设计模式笔记之---建造者模式

本文介绍建造者模式的基本概念,通过UML类图展示其结构,并提供了C++代码示例,展示了如何通过不同的具体建造者创建具有不同内部表示的复杂对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造者模式(Builder):将一个复杂对象的构造和它的表示分离,使得同样的构造过程可以创建不用的表示。

       建造模式将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程可以生成具有不同内部表象的产品对象,建造者模式使得产品的内部表象可以独立的变化,客户端不用知道产品内部组成的细节。

UML类图:

                  

模式说明:

       Builder:

                为创建一个产品对象的各个部件指定抽象接口。

       ConcreteBuilder:

                实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。

  Director:

                构造一个使用Builder接口的对象。

  Product:

                表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

建造者模式基本代码:

/******************************************************************** 
filename:   Bulider.h
created:    2012-09-26 
author:     firehood 

purpose:    firehood 学设计模式之---建造者模式 
*********************************************************************/
#include "assert.h"
#include <iostream>
using namespace std;
#pragma once

// 抽象建造者,建造的对象由PartA和PartB两部分组成
class Builder
{
public:
	Builder(void){}
	~Builder(void){}
    virtual void BuildPartA(void) = 0;
	virtual void BuildPartB(void) = 0;
};

// 具体建造者1
class ConcreteBuilder1: public Builder
{
public:
	ConcreteBuilder1(void){}
	virtual ~ConcreteBuilder1(void){}
	virtual void BuildPartA()
	{
		cout<<"建造第一种类型的产品:创建PartA"<<endl;
	}
	virtual void BuildPartB()
	{
		cout<<"建造第一种类型的产品:创建PartB"<<endl;
	}
};

// 具体建造者1
class ConcreteBuilder2: public Builder
{
public:
	ConcreteBuilder2(void){}
	virtual ~ConcreteBuilder2(void){}
	virtual void BuildPartA()
	{
		cout<<"建造第二种类型的产品:创建PartA"<<endl;
	}
	virtual void BuildPartB()
	{
		cout<<"建造第二种类型的产品:创建PartB"<<endl;
	}
};

// 监管者,处理产品整个建造过程
class Director
{
public:
	Director(Builder* pBuilder):m_pBuilder(NULL)
	{
		assert(pBuilder);
		m_pBuilder = pBuilder;
	}
	virtual ~Director(void){}
    void Construct(void)
	{
		if(m_pBuilder != NULL)
		{
			cout<<"建造产品中.."<<endl;
			m_pBuilder->BuildPartA();
			m_pBuilder->BuildPartB();
		}
	}
private:
	Builder *m_pBuilder;
};


客户端调用代码:

#include "Builder.h"
#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
	cout<<"*************************************"<<endl;
	cout<<"firehood 学设计模式之---建造者模式"<<endl;
	cout<<"*************************************"<<endl;
    
	Director *director;

	director = new Director(new ConcreteBuilder1());
	director->Construct();
	delete director;

	director = new Director(new ConcreteBuilder2());
	director->Construct();
	delete director;

    system("pause");
	return 0;
}

执行结果:

*************************************
firehood 学设计模式之---建造者模式
*************************************
建造产品中..
建造第一种类型的产品:创建PartA
建造第一种类型的产品:创建PartB
建造产品中..
建造第二种类型的产品:创建PartA
建造第二种类型的产品:创建PartB
请按任意键继续. . .


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值