设计模式(4)--创建型之建造模式

本文深入解析建造者模式,一种用于创建复杂对象的设计模式。通过对比工厂模式,详细阐述了建造者模式如何逐步构建对象的不同部分,最后组装成完整的对象。并通过代码示例展示了公寓和别墅的构建过程。

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

1 概念
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,
它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

Builder模式是为对象的创建而设计的模式

  • 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
  • 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

2 创建者模式和工厂模式的区别
1 Factory模式不考虑对象的组装过程,而直接生成一个我想要的对象。
2 Builder模式先一个个的创建对象的每一个部件,再统一组装成一个对象。
3 Factory模式所解决的问题是,工厂生产产品。
4 Builder模式所解决的问题是工厂控制产品生成器组装各个部件的过程,然后从产品生成器中得到产品。

#include <iostream>
using namespace std;

#include "string"


class House
{
public:
void setDoor(string door)
{
	this->m_door = door;
}


void setWall(string wall)
{
	this->m_wall = wall;
}
void setWindow(string window)
{
	this->m_window = window;
}


//--
string getDoor( )
{
	cout << m_door << endl;
	return this->m_door ;
}


string getWall()
{
	cout << m_wall << endl;
	return this->m_wall;
}
string getWindow()
{
	cout << m_window << endl;
	return m_window;
}


private:
string	m_door;
string	m_wall;
string	m_window;
};


class  Builder
{
public:
virtual void buildWall() = 0;
virtual void buildDoor() = 0;
virtual void buildWindow() = 0;
virtual House* getHouse() = 0;
};


//公寓工程队
class  FlatBuilder : public Builder
{
public:
FlatBuilder()
{
	m_house = new House;
}
virtual void buildWall()
{
	m_house->setWall(" flat wall");
}


virtual void buildDoor()
{
	m_house->setDoor("flat door");
}


virtual void buildWindow()
{
	m_house->setWindow("flat window");
}


virtual House* getHouse()
{
	return m_house;
}
private:
House *m_house;
};


//别墅 villa 工程队
class  VillaBuilder : public Builder
{
public:
VillaBuilder()
{
	m_house = new House;
}
virtual void buildWall()
{
	m_house->setWall(" villa wall");
}


virtual void buildDoor()
{
	m_house->setDoor("villa door");
}


virtual void buildWindow()
{
	m_house->setWindow("villa window");
}


virtual House* getHouse()
{
	return m_house;
}
private:
House *m_house;
};


//设计师(指挥者) 负责建造逻辑  
//建筑队 干具体的活
class Director 
{
public:
Director( Builder * build)
{
	m_build = build;
}
void Construct()
{
	m_build->buildWall();
	m_build->buildWindow();
	m_build->buildDoor();
}
private:
 Builder * m_build;
};
void main()
{
House		*house  = NULL;
Builder		*builder = NULL;
Director	*director = NULL;


// 请一个建造别墅的工程队
builder = new VillaBuilder;


//设计师 指挥 工程队 干活
director = new Director(builder);
director->Construct(); 
house  =  builder->getHouse();
house->getWindow();
house->getDoor();

delete house;
delete builder;

//请 FlatBuilder 公寓
builder = new FlatBuilder;
director = new Director(builder);
director->Construct(); 
house  =  builder->getHouse();
house->getWindow();
house->getDoor();
delete house;
delete builder;

delete director;
system("pause");
return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值