C++设计模式之建造者设计模式

C++建造者设计模式

什么是建造者设计模式

建造者设计模式是一种创建型设计模式,它是一种将复杂对象的分解为多个独立部分的模式,以便于构建对象的过程可以被抽象出来并独立变化。

该模式有什么优缺点

优点

  1. 灵活性:建造者设计模式允许对象的部分以不同的方式进行构建,从而提高了对象的灵活性。
  2. 分离性:建造者设计模式将对象的构建过程与其表示分离开来,使得两者可以独立变化。
  3. 可重用性:建造者设计模式可以将对象的构建过程封装起来,以便在不同的场景下重用。

缺点

  1. 复杂性:建造者设计模式需要定义多个类和接口,这会增加代码的复杂度。
  2. 可读性:建造者设计模式的代码可能不够直观,需要一定的经验才能理解。

如何使用

下面是一个使用C++实现建造者设计模式的例子:

c 复制代码
#include <iostream>  
#include <string>  
#include <vector>  
  
// 定义产品类  
class Product {  
public:  
    void add(std::string part) {  
        parts.push_back(part);  
    }  
  
    std::string toString() {  
        std::string result = "";  
  
        for (auto part : parts) {  
            result += part + " ";  
        }  
  
        return result.substr(0, result.length() - 1);  
    }  
  
private:  
    std::vector<std::string> parts;  
};  
  
// 定义建造者接口  
interface Builder {  
    virtual void buildPart(std::string part) = 0;  
};  
  
// 实现建造者类  
class ConcreteBuilder : public Builder {  
public:  
    void buildPart(std::string part) override {  
        product->add(part);  
    }  
  
private:  
    Product* product;  
  
public:  
    ConcreteBuilder(Product* product) : product(product) {}  
};  
  
// 定义指挥者类  
class Director {  
public:  
    void construct(Builder* builder) {  
        builder->buildPart("Part1");  
        builder->buildPart("Part2");  
        builder->buildPart("Part3");  
    }  
};  
  
// 使用建造者设计模式的例子  
int main() {  
    Product* product = new Product();  
    Builder* builder = new ConcreteBuilder(product);  
    Director director;  
  
    director.construct(builder);  
  
    std::cout << product->toString() << std::endl;  
  
    delete product;  
    delete builder;  
  
    return 0;  
}

在上面的例子中,我们首先定义了一个Product类,它表示要构建的对象。然后我们定义了一个Builder接口,它定义了构建对象的方法。接着我们实现了ConcreteBuilder类,它实现了Builder接口,并将对象的构建过程封装起来。最后我们定义了Director类,它负责指导构建过程。在main函数中,我们创建了一个Product对象和一个ConcreteBuilder对象,并将它们关联起来。然后我们使用Director类来指导构建过程,最终输出构建好的对象。需要注意的是,在使用建造者设计模式时,需要仔细设计接口和类之间的关系,以便正确地构建对象。

相关推荐
MC丶科12 分钟前
Java设计模式漫画英雄宇宙-工厂模式 —Factory博士的“超级英雄制造机”!
java·设计模式·漫画
虎子_layor22 分钟前
告别Redis瓶颈:Caffeine本地缓存优化实战指南
java·后端
q***985224 分钟前
什么是Spring Boot 应用开发?
java·spring boot·后端
带刺的坐椅25 分钟前
Solon AI 开发学习4 - chat - 模型实例的构建和简单调用
java·ai·chatgpt·solon
hadage23327 分钟前
--- JavaScript 的一些常用语法总结 ---
java·前端·javascript
合作小小程序员小小店33 分钟前
桌面安全开发,桌面二进制%恶意行为拦截查杀%系统安全开发3.0,基于c/c++语言,mfc,win32,ring3,dll,hook,inject,无数据库
c语言·开发语言·c++·安全·系统安全
Codeking__35 分钟前
C++ 11 atomic 原子性操作
开发语言·c++
crescent_悦38 分钟前
PTA L1-020 帅到没朋友 C++
数据结构·c++·算法
懂得节能嘛.41 分钟前
【Java动态线程池】Redis监控+动态调参
java·开发语言·redis
豆奶特浓61 小时前
Java面试模拟:当搞笑程序员谢飞机遇到电商秒杀与AIGC客服场景
java·spring boot·微服务·面试·aigc·高并发·电商