设计模式-04 设计模式-Builder

慈云数据 2024-05-09 技术支持 32 0
设计模式-04 设计模式-Builder

1.定义

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你使用不同的构建步骤来创建复杂的对象

设计模式-04 设计模式-Builder
(图片来源网络,侵删)

建造者模式的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

                                       指挥者
                                          |
                                     /         \\
                                    /           \\
                                   /             \\
                              具体建造者 A       具体建造者 B
                                   |               |
                                   /               |
                    _______________/_______________|______________
                   |                                              |
                   |                                              |
                   |                                              |
            _______|______________________________________________|____
            |           |
            |                      已构建的产品                         |
            |__________________________________________________________|

在这个 ASCII 图中:

设计模式-04 设计模式-Builder
(图片来源网络,侵删)
  • 指挥者负责协调建造过程,它告诉建造者要创建哪些部分以及如何组装它们。
  • 具体建造者代表不同的产品类型或变体。每个具体建造者负责构建产品的一个或多个部分。
  • 已构建的产品是建造过程的结果

    建造过程如下:

    1. 指挥者创建一个具体建造者。
    2. 指挥者调用具体建造者的构建方法来创建产品的不同部分。
    3. 指挥者可以调用多个具体建造者来创建复杂的产品结构。
    4. 一旦所有部分都构建完成,指挥者调用具体建造者的获取产品方法来检索已构建的产品。
    2.内涵

    换句话说,建造者模式将对象的构建过程与对象的表示分离。这使得你可以使用相同的构建过程来创建不同类型的对象,而无需更改构建代码本身。

    建造者模式包含以下角色:

    • 建造者(Builder):负责创建和组装最终的对象。
    • 具体建造者(Concrete Builder):实现建造者接口,并负责创建和组装最终对象的特定部分。
    • 指挥者(Director):负责协调建造过程,它告诉建造者要创建哪些部分以及如何组装它们。
    • 产品(Product):最终创建的对象。
      3.案例对比

      不用 Builder 设计模式

      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      using namespace std;
      /**
       *  

      hello

         
      • hello
      • world
       * @return  */ int main() {     auto text= "hello";     string output;     output+="

      ";     output+=text;     output+="

      ";     cout
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon