Creational.Builder(创建型模式—建造者模式)

标签: DesignPattern(程序设计的指导思想)
12人阅读 评论(0) 收藏 举报
分类:
建造者模式的思考

(1)建造者模式的功能:构建复杂的产品,而且是细化的、分步骤的构建产品。也就是其重在一步一步解决构造复杂对象的问题。

  ①构建的过程是统一的、固定不变的(则指导者来制定)。变化的是的每步的具体的实现,由建造者来实现。

  ②建造者模式的重心在于分离构建算法具体构造的实现

(2)建造者模式的构成——两个部分

  ①Builder接口:这里定义了如何构建各个部件,也就是知道每个部件的功能是如何实现的,以及如何装配这些部件到产品中去。即部件构造和产品装配

  ②Director知道按什么流程来构建产品,负责整体的构建算法,通常是分步骤来执行。这里要强调的是,整体构建算法是固定的。当Director实现整体构建算法的时候,遇到需要创建和组合具体部件的时候,就会把这些具体的实现委托给Builder去完成

【编程实验】建造神舟飞船

//声明文件

//创建型模式:建造者模式
//神舟飞船的组装
#include <stdio.h>
#include <string>

using namespace std;


//Creational.Builder(创建型模式—建造者模式)
//*************************辅助类:各个部件************************
//轨道舱
class COrbitalModule{
private:
	string strDevice;
public:
	COrbitalModule(string device);
	void SetDev(string device);
	string GetDev();
};

//发动机
class CEngine{
private:
	string strDevice;
public:
	CEngine(string device);
	void SetDev(string device);
	string GetDev();
};

//逃逸塔
class CEscapeTower{
private:
	string strDevice;
public:
	CEscapeTower(string device);
	void SetDev(string device);
	string GetDev();
};

//最终产品Product
class CAirShip{
	COrbitalModule* pOrbitalModule;//轨道舱
	CEngine* pEngine;//发动机
	CEscapeTower* pEscapeTower;//逃逸塔
public:
	CAirShip();
	void SetOrbitalModule(COrbitalModule* orbitalmodule);
	COrbitalModule* GetOrbitalModule();
	void SetEngine(CEngine* engine);
	CEngine* GetEngine();
	void SetEscapeTower(CEscapeTower* escapetower);
	CEscapeTower* GetEscapeTower();
	void Launch();
};

//*******************************************Builder:建造者*****************************
//抽象建造者
class CAbsAirShipBuilder{
public:
	virtual void BuildOrbitalModule() = 0;//构建轨道舱
	virtual void BuildEngine() = 0;//构建发动机
	virtual void BuildEscapeTower() = 0;//构建逃逸塔
};
//具体建造者
class CAirShipBuilder : public CAbsAirShipBuilder{
private:
	CAirShip* pAirShip;
public:
	CAirShipBuilder();
	~CAirShipBuilder();
	 //OrbitalModule部件的构建
	void BuildOrbitalModule();
	//Engine部件的构建
	void BuildEngine();
	//EscapeTower部件的构建
	void BuildEscapeTower();
	 //返回最终的整个产品(神舟飞船)
	CAirShip* GetAirShip();
};
//********************************Director:指导者******************************
class CAirShipDirector{
private:
	CAbsAirShipBuilder* pBuilder;
public:
	CAirShipDirector(CAbsAirShipBuilder* builder);
	 //构建过程
    //1、建造者所构建的各部分是可以是先后顺序的,但本例这个顺序不明显或无关紧要。
    //2、本类中只有构建的过程(流程,也就算法),组装过程放在Builder类中。
	void ProductByStep();
};

//实现文件

//*************************辅助类:各个部件************************
//轨道舱
COrbitalModule::COrbitalModule(string device) : strDevice(device) {}
void COrbitalModule::SetDev(string device){strDevice = device;}
string COrbitalModule::GetDev(){return strDevice;}

//发动机
CEngine::CEngine(string device) : strDevice(device) {}
void CEngine::SetDev(string device){strDevice = device;}
string CEngine::GetDev(){return strDevice;}
//逃逸塔
CEscapeTower::CEscapeTower(string device) : strDevice(device) {}
void CEscapeTower::SetDev(string device){strDevice = device;}
string CEscapeTower::GetDev(){return strDevice;}
//最终产品Product
CAirShip::CAirShip(){ pOrbitalModule = NULL; pEngine = NULL; pEscapeTower = NULL; }
void CAirShip::SetOrbitalModule(COrbitalModule* orbitalmodule){pOrbitalModule = orbitalmodule;}
COrbitalModule* CAirShip::GetOrbitalModule(){return pOrbitalModule;}
void CAirShip::SetEngine(CEngine* engine){pEngine = engine;}
CEngine* CAirShip::GetEngine(){return pEngine;}
void CAirShip::SetEscapeTower(CEscapeTower* escapetower){pEscapeTower = escapetower;}
CEscapeTower* CAirShip::GetEscapeTower(){return pEscapeTower;}
void CAirShip::Launch()
{
	cout << pOrbitalModule->GetDev() << "准备就绪" << endl;//检测轨道舱是否正常
	cout << pEngine->GetDev() << "准备就绪" << endl;//检测发动机是否正常
	cout << pEscapeTower->GetDev() << "准备就绪" << endl;//检测逃逸塔是否正常
	cout << "准备发射" << endl;//发射
}

//*******************************************Builder:建造者*****************************
//抽象建造者
//具体建造者
CAirShipBuilder::CAirShipBuilder(){pAirShip = new CAirShip();}
CAirShipBuilder::~CAirShipBuilder()
{
	if(pAirShip != NULL){
		if(pAirShip->GetOrbitalModule() != NULL)		delete pAirShip->GetOrbitalModule();
		if(pAirShip->GetEngine() != NULL)					delete pAirShip->GetEngine();
		if(pAirShip->GetEscapeTower() != NULL)			delete pAirShip->GetEscapeTower();
		delete pAirShip;
	}
}
//OrbitalModule部件的构建
void CAirShipBuilder::BuildOrbitalModule()
{
	if(pAirShip->GetOrbitalModule() != NULL)		delete pAirShip->GetOrbitalModule();
	pAirShip->SetOrbitalModule(new COrbitalModule("太空舱的轨道舱"));//组装工作
}
//Engine部件的构建
void CAirShipBuilder::BuildEngine()
{
	if(pAirShip->GetEngine() != NULL)			delete pAirShip->GetEngine();
	pAirShip->SetEngine(new CEngine("太空舱的发动机"));//组装工作
}
//EscapeTower部件的构建
void CAirShipBuilder::BuildEscapeTower()
{
	if(pAirShip->GetEscapeTower() != NULL)		delete pAirShip->GetEscapeTower();
	pAirShip->SetEscapeTower(new CEscapeTower("太空舱的逃逸塔"));
}
//返回最终的整个产品(神舟飞船)
CAirShip* CAirShipBuilder::GetAirShip(){return pAirShip;}
//********************************Director:指导者******************************
CAirShipDirector::CAirShipDirector(CAbsAirShipBuilder* builder) : pBuilder(builder){}
//构建过程
//1、建造者所构建的各部分是可以是先后顺序的,但本例这个顺序不明显或无关紧要。
//2、本类中只有构建的过程(流程,也就算法),组装过程放在Builder类中。
void CAirShipDirector::ProductByStep()
{
	//1.先构建发动机
	pBuilder->BuildEngine();
	//2.再构建轨道舱
	pBuilder->BuildOrbitalModule();
	//3.最后构建逃逸塔
	pBuilder->BuildEscapeTower();
}

//测试客户端

void main()
{
	//构建者
	CAirShipBuilder* pBuilder = new CAirShipBuilder();
	//指导者
	CAirShipDirector* pDirector = new CAirShipDirector(pBuilder);
	pDirector->ProductByStep(); 
	//生成最终产品
	CAirShip* pAirShip = pBuilder->GetAirShip();
	pAirShip->Launch();

	delete pBuilder;
	delete pDirector;
}

查看评论

C#设计模式—建造者模式

一、建造者模式定义     将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。     说明:建造模式是一种对象创建型模式,它将客户端与包含多个部件的复杂对象的创建过程分离,客...
  • qq_30507287
  • qq_30507287
  • 2016-06-10 21:39:39
  • 478

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017-06-17 21:37:07
  • 709

创建型模式之建造者模式(java版)

1.引入: 工厂模式中创建的对象大都是简单的对象,就像之前举的造斧头的例子,斧头工厂就算造出来石斧,钢斧还是木斧,以及加上联想牌的钢斧或苹果牌石斧等等,说到底都是斧头,都是单一的对象。所以工厂模式就是...
  • ya_1249463314
  • ya_1249463314
  • 2016-08-17 23:20:38
  • 491

Java建造者模式源码

  • 2018年03月09日 10:35
  • 4KB
  • 下载

创建型模式-建造者模式

建造者模式(Builder pattern) 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户和指导...
  • hsgao_water
  • hsgao_water
  • 2015-07-16 09:24:32
  • 237

创建型模式—建造者模式

建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。在软件系统中,有时候面临一个复杂对象的创建工作,该对象通常由各个部分子对象用一定的算法构成,或者按一定的步...
  • wdeng2011
  • wdeng2011
  • 2017-08-07 12:14:42
  • 92

创建型模式——建造者模式

建造者模式的浅析
  • fjgcxygmxxyx
  • fjgcxygmxxyx
  • 2015-10-10 09:10:13
  • 199

创建型模式之建造者模式

这段时间学习了设计模式,收获主要如下:
  • boniesunshine
  • boniesunshine
  • 2016-01-29 11:18:17
  • 590

设计模式之创建型模式

  • 2015年11月24日 20:11
  • 3.47MB
  • 下载

设计模式总结之创建型模式

经过一个月的时间,终于把
  • u010158267
  • u010158267
  • 2014-05-24 11:39:42
  • 1218
    个人资料
    等级:
    访问量: 1574
    积分: 964
    排名: 5万+
    文章存档