设计模式4-建造者模式-C++

建造者模式隐藏产品制造过程,客户端只需要配置产品的属性,然后指定一个制造者进行加工。

将复杂对象的制造过程隐藏;

一个建造者对应一种产品表现形式;

//电脑 产品
class Computer
{
public:
	Computer() :m_cpu(), m_hardDisk(0), m_memSize(0) {}
	void setCpu(const string& cpu)
	{
		m_cpu.assign(cpu);
	}
	void setMemSize(const int size)
	{
		m_memSize = size;
	}
	void setHardDisk(const int size)
	{
		m_hardDisk = size;
	}
	void setNameplate(const string& name)
	{
		m_name.assign(name);
	}
	void showComputer()
	{
		cout << "nameplate:" << m_name << ",cpu:" << m_cpu << ",memsize:" << m_memSize << ",hardDisk:" << m_hardDisk << endl;
	}
private:
	string m_cpu; // cpu型号
	string m_name; // 电脑铭牌
	int m_memSize; // 内存大小
	int m_hardDisk; // 硬盘大小
};


// 抽象出电脑生产商公共方法
class ComputerMaker
{
public:
	virtual void setCpu(const string& cpu)=0;
	virtual void setMemSize(const int size)=0;
	virtual void setHardDisk(const int size)=0;
	virtual Computer* printComputer() = 0;
protected:
	ComputerMaker(){}
	~ComputerMaker(){ }
};

//Dell电脑 生产商
class DellMaker : public ComputerMaker
{
public:
	DellMaker() :ComputerMaker(),m_computer(new Computer())
	{
		m_computer->setNameplate("Dell");
	}
	~DellMaker() { delete m_computer; m_computer = NULL; }
	Computer* printComputer() override
	{
		return m_computer;
	}
	void setCpu(const string& cpu) override
	{
		m_computer->setCpu(cpu);
	}

	void setHardDisk(const int size) override
	{
		m_computer->setHardDisk(size);
	}

	void setMemSize(const int size) override
	{
		m_computer->setMemSize(size);
	}

private:
	Computer* m_computer;
};

//ThinkPad电脑 生产商
class ThinkPadMaker : public ComputerMaker
{
public:
	ThinkPadMaker() :ComputerMaker(), m_computer(new Computer())
	{
		m_computer->setNameplate("ThinkPad");
	}
	~ThinkPadMaker() { delete m_computer; m_computer = NULL; }
	Computer* printComputer() override
	{
		return m_computer;
	}
	void setCpu(const string& cpu) override
	{
		m_computer->setCpu(cpu);
	}

	void setHardDisk(const int size) override
	{
		m_computer->setHardDisk(size);
	}

	void setMemSize(const int size) override
	{
		m_computer->setMemSize(size);
	}

private:
	Computer* m_computer;
};


// 电脑生产商
class Manager
{
public:
	Manager(const string& cpu, const int memSize, const int diskSize)
		:m_cpu(cpu), m_memSize(memSize), m_diskSize(diskSize)
	{

	}
	Computer* setComputerBuilder(ComputerMaker* builder)
	{
		builder->setCpu(m_cpu);
		builder->setMemSize(m_memSize);
		builder->setHardDisk(m_diskSize);
		return builder->printComputer();
	}
private:
	string m_cpu;
	int m_memSize;
	int m_diskSize;
};
int main()
{
	// 我想要一个什么配置的电脑
	Manager *manager = new Manager("Intel I7",8,500);
	// 定义电脑生产商
	DellMaker* dell = new DellMaker();
	ThinkPadMaker* thinkPad = new ThinkPadMaker();

	// 安排生产商 生产电脑
	Computer* dellComputer = manager->setComputerBuilder(dell);
	Computer* thinkPadComputer = manager->setComputerBuilder(thinkPad);

	// 将生产出电脑展示出来
	dellComputer->showComputer();
	thinkPadComputer->showComputer();
}

猜你喜欢

转载自blog.csdn.net/u010196624/article/details/88594559
今日推荐