设计模式之建造者模式-其实,每个程序员都是一名建造者!

本文深入解析建造者模式,一种用于创建复杂对象的设计模式。通过分离对象的构建过程和表示,使得构建过程得以抽象化,便于扩展和维护。文章通过一个手机构建的例子,详细介绍了建造者模式的四个关键组成部分:抽象建造者类、具体建造者类、指挥者类和具体产品类。

一、建造者模式的概念

建造者模式模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,把复合对象的
建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

二、建造者模式使用场景

1、一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离。
2、对象内部各个属性之间有相互依赖的关系。

三、建造者模式构建方法

1、抽象建造者类

为创建产品各个部分提供统一抽象接口。

2、构建具体建造者类

构建具体的创建产品的各个部分。

3、指挥者类

构造一个使用抽象建造者接口的对象。

4、构建具体产品类

建造者模式所创建的具体产品实例化对象。

四、建造者模式的示例

// BuilderPattern.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>

using namespace std;

class Phone
{
public:
	void setChip(string chip)
	{
		m_chipStr = chip;
	}

	void setScreen(string screen)
	{
		m_screenStr = screen;
	}

	void setShell(string shell)
	{
		m_shellStr = shell;
	}

	string getChip()
	{
		return m_chipStr;
	}

	string getScreen()
	{
		return m_screenStr;
	}

	string getShell()
	{
		return m_shellStr;
	}

private:
	string m_chipStr;
	string m_screenStr;
	string m_shellStr;
};

class Builder
{
public:
	virtual void makeChip() = 0; // 手机芯片
	virtual void makeScreen() = 0; // 手机屏幕
	virtual void makeShell() = 0; // 手机壳
	virtual Phone* getPhone() = 0; // 手机
};

class HuaWeiPhoneBuild : public Builder
{
public:
	HuaWeiPhoneBuild()
	{
		m_pPhone = new Phone;
	}

	virtual void makeChip()
	{
		m_pPhone->setChip("HuaWei Chip");
	}

	virtual void makeScreen()
	{
		m_pPhone->setScreen("HuaWei Screen");
	}

	virtual void makeShell()
	{
		m_pPhone->setShell("HuaWei Shell");
	}

	virtual Phone *getPhone()
	{
		return m_pPhone;
	}

private:
	Phone *m_pPhone;
};

class XiaoMiPhoneBuild : public Builder
{
public:
	XiaoMiPhoneBuild()
	{
		m_pPhone = new Phone;
	}

	virtual void makeChip()
	{
		m_pPhone->setChip("XiaoMi Chip");
	}

	virtual void makeScreen()
	{
		m_pPhone->setScreen("XiaoMi Screen");
	}

	virtual void makeShell()
	{
		m_pPhone->setShell("XiaoMi Shell");
	}

	virtual Phone *getPhone()
	{
		return m_pPhone;
	}

private:
	Phone *m_pPhone;
};

class Director
{
public:
	void creatPhone(Builder *pBuilder)
	{
		pBuilder->makeChip();
		pBuilder->makeScreen();
		pBuilder->makeShell();
	}
};
#define DELETE_PTR(p) {if(p!=nullptr){delete (p); (p)=nullptr;}}
int main()
{
	Director *pDirector = new Director;
	// 指挥者指挥建造产品
	HuaWeiPhoneBuild *pHuaWeiBuilder = new HuaWeiPhoneBuild;
	pDirector->creatPhone(pHuaWeiBuilder);
	Phone *pHuaWeiPhone = pHuaWeiBuilder->getPhone();

	XiaoMiPhoneBuild *pXiaoMiBuilder = new XiaoMiPhoneBuild;
	pDirector->creatPhone(pXiaoMiBuilder);
	Phone *pXiaoMiPhone = pXiaoMiBuilder->getPhone();

	// 输出测试
	cout << "------HuaWei--------" << endl;
	cout << "Chip: " << pHuaWeiPhone->getChip() << endl;
	cout << "Screen: " << pHuaWeiPhone->getScreen() << endl;
	cout << "Shell: " << pHuaWeiPhone->getShell() << endl;
	cout << "------XiaoMi--------" << endl;
	cout << "Chip: " << pXiaoMiPhone->getChip() << endl;
	cout << "Screen: " << pXiaoMiPhone->getScreen() << endl;
	cout << "Shell: " << pXiaoMiPhone->getShell() << endl;
	
    DELETE_PTR(pDirector);
	DELETE_PTR(pHuaWeiBuilder);
	DELETE_PTR(pXiaoMiBuilder);
	DELETE_PTR(pHuaWeiPhone);
	DELETE_PTR(pXiaoMiPhone);

	std::cout << "Hello World!\n";
	getchar();
}

运行结果:
在这里插入图片描述

五、建造者模式的优缺点

优点:

建造者本身独立且易于扩展
容易把控细节风险

缺点:

产品之间必须有共同点
产品太复杂的话将会有很多的建造类

能力有限,如有错误,多多指教。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值