最新传奇手游开服网站,推广引流渠道平台,flash做网站,设计公司做网站有用吗简介
建造者模式#xff08;Builder Pattern#xff09;是一种创建型设计模式#xff0c;它将复杂对象的构建过程与其表示分离#xff0c;使得同样的构建过程可以创建不同的表示。
描述
建造者模式通过将一个复杂对象的构建过程拆分成多个简单的部分#xff0c;并由不同…简介
建造者模式Builder Pattern是一种创建型设计模式它将复杂对象的构建过程与其表示分离使得同样的构建过程可以创建不同的表示。
描述
建造者模式通过将一个复杂对象的构建过程拆分成多个简单的部分并由不同的建造者构建每个部分最终组装成整的对象。这种方式可以灵活地构建不同的对象表示同时封装了对象的构建过程。
原理
建造者模式的核心思想是将一个复杂对象的构建过程与其表示分离。通常一个建造者接口定义了构建每个部分的方法一个具体的建造者实现了该接口并负责构建每个部分。最后一个指挥者类根据具体的构建者来组装构建过程并返回构建完成的对象。
类图 建造者模式中有几个角色 Director导演类按照已有的顺序告诉Builder建造Builder抽象建造者规范建造的方法ConcreteBuilder具体的建造者复实现抽象建造者的方法并返回一个产品Product产品类 示例
假设要构建一个电脑对象该电脑对象包含CPU、内存和硬盘等部件。
创建一个电脑建造者接口ComputerBuilder其中定义了构建每个部分的方法。创建了具体的电脑建造者类ConcreteComputerBuilder实现了建造者接口并负责构建每个部分。创建一个指挥者类Director根据具体的建造者来组装构建过程并最终返回构建好的电脑对象。
C示例代码如下
#include iostream
using namespace std;// 电脑类
class Computer {
public:void setCPU(const string cpu) {this-cpu cpu;}void setMemory(const string memory) {this-memory memory;}void setHardDrive(const string hardDrive) {this-hardDrive hardDrive;}void showInfo() const {cout CPU: cpu endl;cout Memory: memory endl;cout Hard Drive: hardDrive endl;}
private:string cpu;string memory;string hardDrive;
};// 电脑建造者接口
class ComputerBuilder {
public:virtual void buildCPU() 0;virtual void buildMemory() 0;virtual void buildHardDrive() 0;virtual Computer* get() 0;
};// 具体的电脑建造者
class ConcreteComputerBuilder : public ComputerBuilder {
public:ConcreteComputerBuilder() {computer new Computer();}void buildCPU() override {computer-setCPU(Intel Core i7);}void buildMemory() override {computer-setMemory(16GB);}void buildHardDrive() override {computer-setHardDrive(1TB SSD);}Computer* getComputer() override {return computer;}private:Computer* computer;
};// 指挥者
class Director {
public:void setComputerBuilder(ComputerBuilder* builder){this-builder builder;}void constructComputer() {builder-buildCPU();builder-buildMemory();builder-buildHardDrive();}private:ComputerBuilder* builder;
};// 使用示例
int main() {Director director;ConcreteComputerBuilder builder;director.setComputerBuilder(builder);director.constructComputer();Computer* computer builder.getComputer();computer-showInfo();delete computer;return 0;
}输出结果
CPU: Intel Core i7
Memory: 16GB
Hard Drive: 1TB SSD解释
在上述示例中首先定义了电脑类Computer其中包含了一些电脑的属性和显示信息的方法。 然后创建了电脑建造者接口ComputerBuilder其中定义了构建每个部分的抽象方法并定义了获取构建好的电脑的方法。 接着创建了具体的电脑建造者类ConcreteComputerBuilder它实现了电脑建造者接口并负责构建每个部分。 最后创建了一个指挥者类Director它接收一个具体的建造者并根据这个建造者来组装建过程。
在示例中通过调用指挥者的constructComputer方法来使用具体的建造者构建电脑对象。最终通过调用建造者的getComputer方法来获取构建好电脑对象并调用它的showInfo方法来显示电脑的信息。
结论
建造者模式通过将对象的构建过程与其表示分离使得同样的构建过程可以创建不同的表示。它提供了更加灵活和可复用的方式来构建复杂对象。
应用场景
建造者模式适用于以下情况
当需要创建具有复杂内部结构的对象时使用建造者模式可以简化构建过程当需要构建的对象具有不同的表示时使用建造者模式可以根据不同的建造者生成不同的对象表示当需要封装对象的构建过程以便于修改或扩展时使用建造者模式可以将构建过程与表示分离减少代码的耦合度。
建造者模式可以应用于各种场景如复杂对象的构建、流程控制、组装不同的表示等。它通过将构建过程拆分为多个简单的部分使得构建过程可控制和可扩提供了更加灵活和可复用对象构建方式。