「全网最细 + 实战源码案例」设计模式——生成器模式

简介: 生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象。它允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化细节。该模式特别适合构建具有多种配置的复杂对象。其结构包括抽象建造者、具体建造者、指挥者和产品角色。适用于需要创建复杂对象且对象由多个部分组成、构造过程需对外隐藏或分离表示与构造的场景。优点在于更好的控制、代码复用和解耦性;缺点是增加复杂性和不适合简单对象。实现时需定义建造者接口、具体建造者类、指挥者类及产品类。链式调用是常见应用方式之一。

核心思想

  • 生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象,允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化它们的细节。建造者模式特别适合构建具有多种配置的复杂对象。

编辑


结构

1. Builder(抽象建造者)

  • 定义构造产品的抽象方法,具体建造者将实现这些方法。

2. ConcretBuilder(具体建造者)

  • 实现 Builder 接口,定义构造复杂对象的具体过程。

3. Director(指挥者)

  • 调用建造者的步骤,控制产品的构建流程。

4. Product(产品)

  • 最终构建的复杂对象。

适用场景

  1. 需要创建复杂对象,且对象由多个部分组成,这些部分可能需要动态配置。
  2. 构造过程需要对外隐藏,但允许分步骤构造。
  3. 需要让对象的构造过程和表示分离,提供不同的表示形式。

优缺点

优点:

  1. 更好的控制:通过分步构建产品,细化构造过程。
  2. 代码复用:可以通过不同的具体建造者实现构建不同的产品。
  3. 解耦性:构造和表示分离。

缺点:

  1. 增加复杂性:需要额外定义建造者和指挥者类。
  2. 不适合简单对象:对于简单对象,可能显得过于繁琐。

实现步骤

  1. 定义一个实现 Cloneable 接口的原型类。
  2. 在类中重写 clone() 方法,确保对象的复制逻辑。
  3. 调用原型的 clone() 方法创建新对象。

注意事项

1. 浅拷贝与深拷贝:

  • 浅拷贝:只复制对象的基本数据类型,引用类型属性仍指向原始对象。
  • 深拷贝:不仅复制基本类型,也复制引用类型的对象,创建一个完全独立的副本。

2. Cloneable 接口:

  • 在 Java 中,必须实现 Cloneable 接口并重写 clone() 方法,否则会抛出 CloneNotSupportedException

3. 不适用场景:

  • 对于高度依赖构造函数或不支持 clone() 的框架。

示例

编辑

编辑

编辑


拓展——链式调用

package com.colin.patterns.creational_patterns.chain_builder;

public class Phone {

    private String cpu;
    private String screen;
    private String memory;
    private String mainboard;

    // 私有构造方法
    private Phone(Builder builder) {
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainboard = builder.mainboard;
    }

    public static final class Builder {
        private String cpu;
        private String screen;
        private String memory;
        private String mainboard;

        public Builder cpu(String val) {
            cpu = val;
            return this;
        }
        public Builder screen(String val) {
            screen = val;
            return this;
        }
        public Builder memory(String val) {
            memory = val;
            return this;
        }
        public Builder mainboard(String val) {
            mainboard = val;
            return this;
        }

        // 使用Builder创建实例
        public Phone build() {
            return new Phone(this);
        }
    }

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + ''' +
                ", screen='" + screen + ''' +
                ", memory='" + memory + ''' +
                ", mainboard='" + mainboard + ''' +
                '}';
    }
}

package com.colin.patterns.creational_patterns.chain_builder;

public class Client {
    public static void main(String[] args) {
        Phone phone = new Phone.Builder()
                .cpu("Intel Core i7")
                .memory("16GB")
                .screen("13.3"")
                .mainboard("Intel HM")
                .build();

        System.out.println(phone);
    }
}


与其他模式的关系

目录
相关文章
|
4月前
|
设计模式 消息中间件 监控
并发设计模式实战系列(5):生产者/消费者
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第五章,废话不多说直接开始~
124 1
|
4月前
|
设计模式 监控 Java
并发设计模式实战系列(8):Active Object
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第8章,废话不多说直接开始~
46 0
并发设计模式实战系列(8):Active Object
|
4月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
111 0
|
4月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
90 0
|
4月前
|
设计模式 运维 监控
并发设计模式实战系列(4):线程池
需要建立持续的性能剖析(Profiling)和调优机制。通过以上十二个维度的系统化扩展,构建了一个从。设置合理队列容量/拒绝策略。动态扩容/优化任务处理速度。检查线程栈定位热点代码。调整最大用户进程数限制。CPU占用率100%
263 0
|
4月前
|
设计模式 消息中间件 监控
并发设计模式实战系列(3):工作队列
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第三章,废话不多说直接开始~
71 0
|
4月前
|
设计模式 存储 安全
并发设计模式实战系列(7):Thread Local Storage (TLS)
🌟 大家好,我是摘星! 🌟今天为大家带来的是并发设计模式实战系列,第七章Thread Local Storage (TLS),废话不多说直接开始~
125 0
|
4月前
|
消息中间件 设计模式 监控
并发设计模式实战系列(9):消息传递(Message Passing)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第九章,废话不多说直接开始~
84 0
|
4月前
|
设计模式 安全 NoSQL
并发设计模式实战系列(10):Balking(犹豫模式)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第10章,废话不多说直接开始~
39 0
|
2月前
|
设计模式 C++
【实战指南】设计模式 - 工厂模式
工厂模式是一种面向对象设计模式,通过定义“工厂”来创建具体产品实例。它包含简单工厂、工厂方法和抽象工厂三种形式,分别适用于不同复杂度的场景。简单工厂便于理解但扩展性差;工厂方法符合开闭原则,适合单一类型产品创建;抽象工厂支持多类型产品创建,但不便于新增产品种类。三者各有优缺点,适用于不同设计需求。
93 20