深入浅出设计模式 - 建造者模式

简介: 深入浅出设计模式 - 建造者模式

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

1687840497430.jpg

1、什么是建造者模式

建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。该模式可以通过一步一步地构建复杂对象来简化其构建过程,并且可以在构建过程中灵活地添加或删除组件。建造者模式的核心思想是将对象的构建过程分解为多个步骤,每个步骤由一个具体的建造者来实现,最终由一个指挥者来协调建造者的执行顺序以创建对象。

2、建造者模式有什么优缺点

建造者模式的优点包括:

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

  2. 可以通过一步一步地构建复杂对象来简化其构建过程,并且可以在构建过程中灵活地添加或删除组件。

  3. 可以提高代码的复用性,因为不同的建造者可以共享相同的构建过程。

  4. 可以提高代码的可读性和可维护性,因为每个具体建造者负责构建一个组件,使得代码更加清晰。

  5. 可以避免类爆炸问题,因为不同的组件可以由不同的具体建造者来构建,而不是通过继承来实现。

建造者模式的缺点包括:

  1. 建造者模式需要创建多个类,因此会增加代码量。

  2. 如果产品的组件非常多,那么建造者模式的构建过程可能会变得非常复杂。

  3. 如果产品的组件发生变化,那么需要修改建造者的代码,可能会影响整个系统的稳定性。

  4. 建造者模式需要使用指挥者来协调建造者的执行顺序,可能会增加系统的复杂性。

总的来说,建造者模式适用于需要构建复杂对象的场景,可以将构建过程分解为多个步骤,使得代码更加清晰、可维护。但是需要权衡其优缺点,选择合适的设计模式来解决问题。

3、建造者模式的应用场景

建造者模式适用于以下场景:

  1. 需要创建复杂对象的场景,例如汽车、电脑、手机等,这些对象的构建过程往往需要多个步骤,并且每个步骤可能有多种实现方式。

  2. 需要创建对象的表示与构建过程分离的场景,例如通过 XML 文件或者数据库记录来构建对象。

  3. 需要创建不同表示的对象的场景,例如通过相同的构建过程来创建不同的 HTML 页面。

  4. 需要在构建过程中灵活地添加或删除组件的场景,例如通过构建器来构建菜单或者表单。

  5. 需要提高代码的复用性和可读性的场景,例如通过建造者模式来构建图形用户界面组件。

建造者模式适用于需要构建复杂对象的场景,可以将构建过程分解为多个步骤,使得代码更加清晰、可维护。

4、建造者模式的结构

建造者模式通常包含以下几个角色:

  1. 产品(Product):需要被构建的复杂对象,通常由多个组件组成。

  2. 抽象建造者(Builder):定义了创建产品各个部件的抽象接口,通常包含多个方法用于构建不同的组件。

  3. 具体建造者(ConcreteBuilder):实现了抽象建造者接口,负责具体的产品构建过程,通常包含多个方法用于构建不同的组件。

  4. 指挥者(Director):负责协调建造者的执行顺序,以完成产品的构建过程。

5、建造者模式的代码案例

下面是一个简单的建造者模式示例代码:
首先定义产品类 Product ,包含多个组件:

package com.pany.camp.design.principle.build;

/**
 *
 * @description:  产品类
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-27 12:27
 */
public class Product {
   
   
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
   
   
        this.partA = partA;
    }

    public void setPartB(String partB) {
   
   
        this.partB = partB;
    }

    public void setPartC(String partC) {
   
   
        this.partC = partC;
    }

    public void show() {
   
   
        System.out.println("PartA: " + partA);
        System.out.println("PartB: " + partB);
        System.out.println("PartC: " + partC);
    }
}

然后定义抽象建造者接口 Builder ,包含多个方法用于构建不同的组件:

package com.pany.camp.design.principle.build;

/**
 *
 * @description:  抽象建造者接口
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-06-27 12:28
 */
public interface Builder {
   
   

    void buildPartA();

    void buildPartB();

    void buildPartC();

    Product getResult();
}

接着定义具体建造者类 ConcreteBuilder ,实现了抽象建造者接口,负责具体的产品构建过程:

package com.pany.camp.design.principle.build;

/**
 *
 * @description:  具体建造者类
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-27 12:29 
 */
public class ConcreteBuilder implements Builder {
   
   

    private Product product = new Product();

    @Override
    public void buildPartA() {
   
   
        product.setPartA("PartA");
    }

    @Override
    public void buildPartB() {
   
   
        product.setPartB("PartB");
    }

    @Override
    public void buildPartC() {
   
   
        product.setPartC("PartC");
    }

    @Override
    public Product getResult() {
   
   
        return product;
    }
}

最后定义指挥者类 Director ,负责协调建造者的执行顺序,以完成产品的构建过程:

package com.pany.camp.design.principle.build;

/**
 *
 * @description:  指挥者类
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-27 12:29 
 */
public class Director {
   
   

    public void construct(Builder builder) {
   
   
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

客户端代码可以通过指挥者来构建产品:

package com.pany.camp.design.principle.build;

/**
 *
 * @description:  客户端类
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-27 12:30
 */
public class Client {
   
   

    public static void main(String[] args) {
   
   
        Director director = new Director();
        Builder builder = new ConcreteBuilder();
        director.construct(builder);
        Product product = builder.getResult();
        product.show();
    }
}

我们可以看到建造者模式的核心思想:将复杂对象的构建过程分解为多个步骤,每个步骤由一个具体的建造者来实现,最终由一个指挥者来协调建造者的执行顺序以创建对象,从而实现了复杂对象的构建与表示分离的目的。

输出如下:

PartA: PartA
PartB: PartB
PartC: PartC

Process finished with exit code 0

1686494501743.jpg

💕💕 本文由激流原创,首发于CSDN博客,博客主页 https://blog.csdn.net/qq_37967783?spm=1010.2135.3001.5421
💕💕喜欢的话记得点赞收藏啊

目录
相关文章
|
5月前
|
设计模式 Java
【设计模式系列笔记】建造者模式
建造者模式是一种创建型设计模式,用于将复杂对象的构建与其表示分离,使构建过程可定制。关键元素包括产品类(定义要构建的对象)、建造者接口(定义构建方法)、具体建造者类(实现构建过程)和指导者类(负责构建过程)。通过建造者模式,客户端可以灵活地创建具有不同表示的复杂对象,提高代码的可读性和可维护性,尤其适用于构建过程复杂且包含多个可选部分的情况。
125 1
|
5月前
|
设计模式 安全 Java
构建未来应用:Java设计模式 - 建造者模式(Builder)在现代编程中的应用
【4月更文挑战第7天】建造者模式是提升代码质量的关键,尤其在复杂环境中。它分步骤构建对象,将构建与表示分离,适用于UI构建、数据模型组装、配置文件解析和网络请求构造等场景。最佳实践包括明确构建步骤、提供默认值、支持链式调用和确保线程安全。然而,过多步骤、不一致状态和性能问题是使用时需注意的问题。掌握建造者模式对于现代编程至关重要。
74 3
|
6天前
|
设计模式 算法
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
|
7天前
|
设计模式 算法 Java
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
|
2月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
4月前
|
设计模式 算法
建造者模式-大话设计模式
建造者模式-大话设计模式
|
5月前
|
设计模式 uml
大话设计模式(3)——造物者一般的建造者模式
大话设计模式(3)——造物者一般的建造者模式
36 1
大话设计模式(3)——造物者一般的建造者模式
|
3月前
|
设计模式 JavaScript
js设计模式【详解】—— 建造者模式
js设计模式【详解】—— 建造者模式
34 0
|
4月前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
4月前
|
设计模式 Java
Java设计模式:建造者模式之经典与流式的三种实现(四)
Java设计模式:建造者模式之经典与流式的三种实现(四)