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