Java设计模式之建造者模式

建造者模式(Builder Pattern)

1. 概述

建造者模式是一种创建型设计模式,它通过将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。这个模式主要用于创建一些复杂的对象,这些对象的创建过程通常涉及多个步骤。

2. 适用场景
  • 需要生成的对象具有复杂的内部结构,构建步骤复杂。
  • 想要通过不同的配置方式构造不同的对象表示(例如同一个对象在不同场景下有不同的配置)。
  • 需要创建的对象的属性较多,且有不同的组合方式。
3. 结构
  • Builder(建造者接口):定义了构建复杂对象的各个步骤的接口。
  • ConcreteBuilder(具体建造者):实现Builder接口,构建并组装各个部件。
  • Product(产品类):表示最终构建的复杂对象。
  • Director(指挥者):负责按照特定顺序或规则构建产品对象,使用Builder接口来完成构建。
4. 示例代码

假设我们要构建一个复杂的电脑(Computer)对象,该对象包含多个部件(如CPU、内存、存储等),我们可以使用建造者模式来构建不同配置的电脑。

1. 定义产品类
class Computer {
    private String CPU;
    private String RAM;
    private String storage;
    private String GPU;

    // 提供给Builder类使用的构造方法
    private Computer(Builder builder) {
        this.CPU = builder.CPU;
        this.RAM = builder.RAM;
        this.storage = builder.storage;
        this.GPU = builder.GPU;
    }

    @Override
    public String toString() {
        return "Computer [CPU=" + CPU + ", RAM=" + RAM + ", storage=" + storage + ", GPU=" + GPU + "]";
    }

    // 静态内部类 Builder
    public static class Builder {
        private String CPU;
        private String RAM;
        private String storage;
        private String GPU;

        public Builder setCPU(String CPU) {
            this.CPU = CPU;
            return this;
        }

        public Builder setRAM(String RAM) {
            this.RAM = RAM;
            return this;
        }

        public Builder setStorage(String storage) {
            this.storage = storage;
            return this;
        }

        public Builder setGPU(String GPU) {
            this.GPU = GPU;
            return this;
        }

        public Computer build() {
            return new Computer(this);
        }
    }
}
2. 使用Builder构建不同的Computer对象
public class BuilderPatternDemo {
    public static void main(String[] args) {
        // 构建高性能电脑
        Computer highEndComputer = new Computer.Builder()
                .setCPU("Intel i9")
                .setRAM("32GB")
                .setStorage("1TB SSD")
                .setGPU("NVIDIA RTX 3080")
                .build();

        // 构建普通电脑
        Computer midRangeComputer = new Computer.Builder()
                .setCPU("Intel i5")
                .setRAM("16GB")
                .setStorage("512GB SSD")
                .setGPU("NVIDIA GTX 1660")
                .build();

        // 输出电脑配置
        System.out.println("High-end Computer: " + highEndComputer);
        System.out.println("Mid-range Computer: " + midRangeComputer);
    }
}
3. 运行结果
High-end Computer: Computer [CPU=Intel i9, RAM=32GB, storage=1TB SSD, GPU=NVIDIA RTX 3080]
Mid-range Computer: Computer [CPU=Intel i5, RAM=16GB, storage=512GB SSD, GPU=NVIDIA GTX 1660]
4. 分析
  • 分步构造:建造者模式将复杂对象的创建过程分解为多个步骤,用户可以按需调用不同的构造方法,以得到不同的对象。
  • 链式调用:通过在 Builder 类的方法中返回 this,可以实现链式调用,简化代码。
  • 不变性Computer 类的字段在对象创建后无法更改,保证了对象的不可变性,提高了安全性。
5. 优缺点
  • 优点

    • 易于扩展:可以很容易地添加新的构建步骤或不同的产品配置,而不会影响现有代码。
    • 清晰的构建过程:将复杂对象的构建过程分解为多个步骤,使代码更加清晰易懂。
    • 支持链式调用:可以通过链式调用简化代码,提高代码的可读性。
  • 缺点

    • 对象创建过程复杂:如果对象非常简单,使用建造者模式可能会增加不必要的复杂性。
    • 更多的类:需要额外定义 Builder 类,增加了类的数量。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿时光不负.

爱意随风起,风止意难平。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值