建造者模式
感觉这模式就是常见的封装.. 看不出哪里比简单工厂好
建造者模式
动机
- 将一个复杂对象的创建过程及其表示分离,同一个创建过程可以创建不同的表示
- 当需要创建一个包含多个部分或配置选项的复杂对象,并且需要将构建过程与表示分离时,建造者模式很有用
- 帮助你灵活地构建不同配置的对象,同时保持构建过程的清晰性和可维护性
经典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号