构造者模式

原文链接

构造者模式是指一个由多个简单的对象一起构造为一个复杂的对象,使得在对象的创建时可以由一个相同的流程创造出多个不同的对象进行使用;
以汽车为例:暂时将汽车的组成分为:钢材、发动机、玻璃和座椅;当我们构建不同品牌的汽车时只需要输入该汽车的组成部分的相关标识即可完成对该品牌汽车的组装;同时也也可以获取多个汽车品牌的汽车对象;

//汽车组成代码
#include <iostream>
#include<string>
//组成基类
class ZuChengClass
{
public:
	ZuChengClass(){};
	~ZuChengClass(){};
	virtual void ShowZuChengThings() = 0;
	void SetName(std::string ZuChengName)
	{
		_ZuChengName = ZuChengName;
	};
	std::string GetName()
	{
		return _ZuChengName;
	};
protected:
private:
	std::string _ZuChengName;
};
//钢材
class Gangcai:public ZuChengClass
{
public:
	Gangcai(std::string Name){
		SetName(Name);
	};
	~Gangcai(){};
	virtual void ShowZuChengThings()
	{
		std::cout << "钢材提供商" << GetName() << std::endl;
	}
private:
	
};
//玻璃
class Boli :public ZuChengClass
{
public:
	Boli(std::string Name){
		SetName(Name);
	};
	~Boli(){};
	virtual void ShowZuChengThings()
	{
		std::cout << "玻璃提供商" << GetName() << std::endl;
	}
private:

};
//发动机
class FaDongJi :public ZuChengClass
{
public:
	FaDongJi(std::string Name){
		SetName(Name);
	};
	~FaDongJi(){};
	virtual void ShowZuChengThings()
	{
		std::cout << "发动机提供商" << GetName() << std::endl;
	}
private:
};
//座椅
class ZuoYI :public ZuChengClass
{
public:
	ZuoYI(std::string Name){
		SetName(Name);
	};
	~ZuoYI(){};

	virtual void ShowZuChengThings()
	{
		std::cout << "座椅提供商" << GetName() << std::endl;
	}
private:

};
//汽车产品代码
#include "ZuchengClass.h"
//汽车基类
class CarClass
{
public:
	CarClass()
	{
		_GangCai = NULL;
		_Boli = NULL;
		_ZuoYi = NULL;
		_FadongJi = NULL;
	};
	~CarClass()
	{
		if (_GangCai)
		{
			delete _GangCai;
		}
		if (_Boli)
		{
			delete _Boli;
		}
		if (_ZuoYi)
		{
			delete _ZuoYi;
		}
		if (_FadongJi)
		{
			delete _FadongJi;
		}

	};
	void SetGangCai(std::string GangCaiName)
	{
		_GangCai = new Gangcai(GangCaiName);

	};
	void SetBoli(std::string BoliName)	{
		_Boli = new Boli(BoliName);

	};
	void SetZuoYi(std::string ZuoYiName)	{
		_ZuoYi = new ZuoYI(ZuoYiName);
	};
	void SetFadongJi(std::string FadongName)	{
		_FadongJi = new FaDongJi(FadongName);

	};
	void SetCarName(std::string CarName)	{
		_CarName = CarName;
	};

	void PrintCarThings()
	{
		std::cout << "汽车品牌" << _CarName << std::endl;
		if (_GangCai)
		{
			_GangCai->ShowZuChengThings();
		}
		if (_Boli)
		{
			_Boli->ShowZuChengThings();
		}
		if (_ZuoYi)
		{
			_ZuoYi->ShowZuChengThings();
		}
		if (_FadongJi)
		{
			_FadongJi->ShowZuChengThings();
		}
	}
private:
	ZuChengClass*	_GangCai;
	ZuChengClass*	_Boli;
	ZuChengClass*	_ZuoYi;
	ZuChengClass*	_FadongJi;
	std::string		_CarName;

};

//第一中产品
class OneCarClass :public CarClass
{
public:
	OneCarClass(){
		SetBoli("OneBoli");
		SetGangCai("OneGangCai");
		SetZuoYi("OneZuoYi");
		SetFadongJi("OneFadongJi");
		SetCarName("OneCar");
	};
	~OneCarClass(){};

private:

};
//第二中产品
class TwoCarClass :public CarClass
{
public:
	TwoCarClass(){
		SetBoli("TwoBoli");
		SetGangCai("TwoGangCai");
		SetZuoYi("TwoZuoYi");
		SetFadongJi("TwoFadongJi");
		SetCarName("TwoCar");
	};
	~TwoCarClass(){};
private:
};
调用:
	OneCarClass OneCar;
	OneCar.PrintCarThings();
	TwoCarClass TwoCar;
	TwoCar.PrintCarThings();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值