建造者模式
感觉这模式就是常见的封装.. 看不出哪里比简单工厂好
建造者模式
动机
- 将一个复杂对象的创建过程及其表示分离,同一个创建过程可以创建不同的表示
 - 当需要创建一个包含多个部分或配置选项的复杂对象,并且需要将构建过程与表示分离时,建造者模式很有用
 - 帮助你灵活地构建不同配置的对象,同时保持构建过程的清晰性和可维护性
 
经典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;
};
工厂模式和建造者模式的区别
工厂模式是关注多个类功能组件整体逻辑的实现
建造者模式是关注一个对象内部具体细节的实现,比如电脑里的具体配置
                    
                
                
            
        
浙公网安备 33010602011771号