(一)创建型设计模式:3、建造者模式(Builder Pattern)

这篇具有很好参考价值的文章主要介绍了(一)创建型设计模式:3、建造者模式(Builder Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、建造者模式含义

2、建造者模式的讲解

3、使用C++实现建造者模式的实例

4、建造者模式的优缺点

5、建造者模式VS工厂模式


1、建造者模式含义

The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations.

将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

其实上面这句话本身是有点晦涩难懂,后面在网上看到有人这样说,便留下深刻的印象:

当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。

这个解释也可以理解为应用场景,当我们单纯懂得设计模式怎么实现并不重要,重要的是要知道适用于什么场景,这个就得靠一些经验和思考了。

2、建造者模式的讲解

(一)创建型设计模式:3、建造者模式(Builder Pattern),设计模式,设计模式,建造者模式,c++

从上面的UML可以看出,建造者模式涉及到以下四个角色的概念:

(1)抽象建造者角色:提供一个接口,规范产品对象的建造,一般由子类实现。一般来说,产品的组成部分数与建造方法数相同,即有多少组成部分,就有多少个建造方法。

(2)具体建造者角色:该角色实现了抽象建造者抽象建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。

(3)导演者角色:负责调用具体建造者按照顺序建造产品。导演者只负责调度,真正执行的是具体建造者角色。

(4)产品角色:该角色是建造的复杂对象,提供基本方法。

3、使用C++实现建造者模式的实例


#include <iostream>
#include <string>

// 产品类
class Product {
public:
    void setPartA(const std::string& partA) {
        m_partA = partA;
    }

    void setPartB(const std::string& partB) {
        m_partB = partB;
    }

    void setPartC(const std::string& partC) {
        m_partC = partC;
    }

    void show() const {
        std::cout << "Product Parts: " << m_partA << ", " << m_partB << ", " << m_partC << std::endl;
    }

private:
    std::string m_partA;
    std::string m_partB;
    std::string m_partC;
};

// 抽象建造者类
class Builder {
public:
    virtual void buildPartA() = 0;
    virtual void buildPartB() = 0;
    virtual void buildPartC() = 0;
    virtual Product* getResult() = 0;
};

// 具体建造者类
class ConcreteBuilder : public Builder {
public:
    void buildPartA() override {
        m_product->setPartA("Part A");
    }

    void buildPartB() override {
        m_product->setPartB("Part B");
    }

    void buildPartC() override {
        m_product->setPartC("Part C");
    }

    Product* getResult() override {
        return m_product;
    }

private:
    Product* m_product = new Product();
};

// 指挥者类
class Director {
public:
    void construct(Builder* builder) {
        builder->buildPartA();
        builder->buildPartB();
        builder->buildPartC();
    }
};

int main() {
    Director director;
    ConcreteBuilder builder;

    director.construct(&builder);
    Product* product = builder.getResult();
    product->show();

    delete product;

    return 0;
}

在上述示例中,我们定义了一个产品类(Product),它有三个部分(Part A、Part B、Part C)。然后,我们定义了一个抽象建造者类(Builder),其中包含了构建产品各个部分的纯虚函数。接着,我们实现了具体的建造者类(ConcreteBuilder),它实现了抽象建造者类的纯虚函数,并负责构建产品对象。最后,我们定义了一个指挥者类(Director),它负责调用建造者的方法来构建产品。

在主函数中,我们创建了一个具体的建造者对象,并将其传递给指挥者对象。指挥者根据具体的建造者对象来构建产品,最终得到一个完整的产品对象。我们可以通过产品对象的show()方法来展示产品的各个部分。

这就是一个简单的建造者模式的C++源码示例

4、建造者模式的优缺点

(1)优点:

1)分离构建过程和表示:建造者模式可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。这样可以提高代码的灵活性和可维护性。

2)更好的封装性:通过建造者模式,可以将对象的构建过程封装在具体的建造者类中,客户端只需要与指挥者进行交互,无需关心具体的构建细节。这样可以隐藏对象的创建过程,提供更好的封装性。

3)可以控制构建过程:建造者模式允许你逐步构建对象,并在每个步骤中进行必要的操作、检查或验证。这样可以更加灵活地控制对象的构建过程,满足不同的需求。

4)创建不同表示形式的对象:通过定义不同的建造者和指挥者,可以根据需求定制不同的构建过程,创建不同的产品表示形式。这样可以提供更多的选择和灵活性。

(2)缺点:

1)增加了代码量:使用建造者模式会增加额外的类和接口,从而增加了代码量。如果对象的构建过程比较简单,使用建造者模式可能会显得过于繁琐。

2)增加了系统复杂性:引入建造者模式会增加系统的复杂性,因为需要定义多个类和接口,并且需要协调指挥者和建造者之间的关系。这可能会增加理解和维护的难度。

3)不适用于创建简单对象:如果对象的构建过程比较简单,只有少量的步骤或参数,使用建造者模式可能会显得过于繁琐。此时,直接使用简单工厂或工厂方法模式可能更加合适。

总的来说,建造者模式通过分离构建过程和表示,提供了更好的封装性和灵活性,可以控制构建过程并创建不同表示形式的对象。然而,它也增加了代码量和系统复杂性,不适用于创建简单对象。

5、建造者模式VS工厂模式

建造者模式和工厂模式是两种常见的创建型设计模式,它们有以下几点区别:

(1)目的不同:工厂模式关注的是创建对象的过程,将对象的创建逻辑封装在一个工厂类中,通过工厂类来创建具体的对象。而建造者模式关注的是创建复杂对象的过程,将对象的构建过程与其表示分离,通过指挥者和建造者来逐步构建对象。

(2)对象复杂度不同:工厂模式适用于创建简单对象,通常只需要一两个步骤即可完成对象的创建。而建造者模式适用于创建复杂对象,对象的构建过程需要多个步骤,并且可以根据需求定制不同的构建过程。

(3)调用方式不同:工厂模式通过调用工厂类的方法来创建对象,客户端直接与工厂类交互。而建造者模式通过指挥者来控制建造者的构建过程,客户端只需要与指挥者进行交互,无需直接与建造者类交互。

(4)灵活性不同:工厂模式相对较为灵活,可以根据需要扩展和添加新的产品类型,只需要添加对应的具体产品和工厂类即可。而建造者模式相对更加灵活,可以根据需要定制不同的构建过程,创建不同的产品表示形式。

总的来说,工厂模式适用于创建简单对象,将对象的创建过程封装在工厂类中;而建造者模式适用于创建复杂对象,通过指挥者和建造者来分步构建对象。
 文章来源地址https://www.toymoban.com/news/detail-640891.html

到了这里,关于(一)创建型设计模式:3、建造者模式(Builder Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式之建造者模式详解(Builder Pattern)

    在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    浏览(29)
  • 【Java设计模式】建造者模式 & 注解@Builder

    将一个复杂对象的构造与它的表示分离 ,使同样的构建过程可以创建不同的表示。它使将一个复杂的对象分解成多个简单的对象,然后一步步构建而成。 每一个具体建造者都相对独立,而与其它的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,

    2024年02月14日
    浏览(30)
  • 【设计模式】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    建造者模式又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同属性的对象 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,不

    2024年02月16日
    浏览(39)
  • 建造者模式-Builder Pattern

    原文地址:https://jaune162.blog/design-pattern/builder-pattern/ 现在一般大型的业务系统中的消息通知的形式都会有多种,比如短信、站内信、钉钉通知、邮箱等形式。虽然信息内容相同,但是展现形式缺不同。如短信使用的是纯文本的形式,钉钉使用的一般是Markdown的形式,而邮箱则

    2024年02月20日
    浏览(23)
  • 建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是最复杂的创建型模式,它 用于创建一个包含多个组成部分的复杂对象 ,可以返回一个完整的产品对象给用户。它通过将 客户端与包含多个组成部分的复杂对象的创建过程分离 ,使得 客户端无需知道复杂对象的内部组成部分与装配方式,只需要

    2024年02月03日
    浏览(47)
  • 【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    建造者模式又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同属性的对象 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,不

    2024年02月15日
    浏览(28)
  • 生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]

            生成器设计模式(Builder Design Pattern)是一种创建型设计模式,用于处理具有多个属性和复杂构造过程的对象。生成器模式通过将对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。这有助于减少构造函数的参数个数,提高代码的可读性和可维

    2023年04月11日
    浏览(28)
  • 设计模式之创建型模式---建造者模式

    建造者模式是一种创建型设计模式,其核心思想是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来构建出复杂对象。 建造者模式的基本构成通常包括

    2024年04月15日
    浏览(36)
  • 设计模式—创建型模式之建造者模式

    如果我们创建的对象比较复杂,但其细节还要暴露给使用者,这样就需要用到建造者模式。 建造者设计模式, 屏蔽过程,而不屏蔽细节。 比如我们有一个手机类,定义如下: 我们想定制自己的一个手机,可以先定义一个抽象的构建者; 如果我们想定制一个 香蕉手机 ,就可

    2024年02月06日
    浏览(33)
  • 设计模式:创建者模式 - 建造者模式

    将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。不同的构建器,相同的

    2023年04月24日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包