建造者模式

感觉这模式就是常见的封装.. 看不出哪里比简单工厂好

建造者模式

动机

  • 将一个复杂对象的创建过程及其表示分离,同一个创建过程可以创建不同的表示
  • 当需要创建一个包含多个部分或配置选项的复杂对象,并且需要将构建过程与表示分离时,建造者模式很有用
  • 帮助你灵活地构建不同配置的对象,同时保持构建过程的清晰性和可维护性

经典Builder模式

以一个构建 computer 类的过程为例。我们可能需要构造不同参数的 computer 。这时候我们就可以通过不同的 computerBuilder 类来实现,这些bulder类都继承于一个 computerBuilder 虚基类,其中定义了一些模板方法

//ComputerBuilder.h
#pragma once
#include <string>
#include <iostream>
#include <memory>
using namespace std;

class Computer
{
public:
	void SetCPU(const string& cpu)
	{
		m_cpu = cpu;
	}
	void SetMemory(const string& memory)
	{
		m_memory = memory;
	}
	void SetStorage(const string& storage)
	{
		m_storage = storage;
	}

	void Show() const
	{ 
		cout << "CPU: " << m_cpu << endl;
		cout << "Memory: " << m_memory << endl;
		cout << "Storage: " 

//DellComputerBuilder.h
#pragma once
#include "ComputerBuilder.h"
class DellComputerBuilder :
    public ComputerBuilder
{
public:
	DellComputerBuilder()
	{
		m_computer = make_shared<Computer>();
	}
	virtual void BuildCPU()
	{
		m_computer->SetCPU("Intel¿áî£i5-13500HX");
	}
	virtual void BuildMemory()
	{
		m_computer->SetMemory("16G LPDDR 4800MHz˫ͨµÀ");
	}
	virtual void BuildStorage()
	{
		m_computer->SetStorage("512G PCle 4.0 SSD");
	}

	virtual Computer CreateComputer()
	{
		return *m_computer;
	}
private:
	shared_ptr<Computer> m_computer;
};

//MyComputer.cpp
#pragma once
#include <string>
#include <iostream>
#include <memory>
using namespace std;

class MyComputer
{
public:
	void SetCPU(const string& cpu)
	{
		m_cpu = cpu;
	}
	void SetMemory(const string& memory)
	{
		m_memory = memory;
	}
	void SetStorage(const string& storage)
	{
		m_storage = storage;
	}

	void Show() const
	{
		cout << "CPU: " << m_cpu << endl;
		cout << "Memory: " << m_memory << endl;
		cout << "Storage: " << m_storage << endl;
	}

private:
	string m_cpu;
	string m_memory;
	string m_storage;
};

class MyComputerBuilder
{
public:
	MyComputerBuilder()
	{
		m_computer = make_shared<MyComputer>();
	}
	MyComputerBuilder&  BuildCPU(const string& cpu)
	{
		m_computer->SetCPU(cpu);
		return *this;
	}
	MyComputerBuilder& BuildMemory(const string& memory)
	{
		m_computer->SetMemory(memory);
		return *this;
	}
	MyComputerBuilder& BuildStorage(const string& storage)
	{
		m_computer->SetStorage(storage);
		return *this;
	}

	MyComputer CreateComputer()
	{
		return *m_computer;
	}
private:
	shared_ptr<MyComputer> m_computer;
};

工厂模式和建造者模式的区别

工厂模式是关注多个类功能组件整体逻辑的实现
建造者模式是关注一个对象内部具体细节的实现,比如电脑里的具体配置
posted @ 2023-09-24 15:49  游客0721  阅读(14)  评论(0)    收藏  举报