设计模式-构建器模式 Java

模式概述

构建器模式(Builder Pattern)属于创建型设计模式,核心思想是将一个复杂对象的构建过程与其表示方式分离。通过相同的构建过程可以创建不同的表示形式,特别适用于具有复杂内部结构的对象。

简单代码示例

示例

// 1. 产品类:计算机(包含多个组件)
class Computer {
    private String cpu;
    private String ram;
    private String storage;
    private String gpu;

    public void setCpu(String cpu) { this.cpu = cpu; }
    public void setRam(String ram) { this.ram = ram; }
    public void setStorage(String storage) { this.storage = storage; }
    public void setGpu(String gpu) { this.gpu = gpu; }

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

// 2. 抽象构建器
interface ComputerBuilder {
    void buildCPU();
    void buildRAM();
    void buildStorage();
    void buildGPU();
    Computer getResult();
}

// 3. 具体构建器:游戏电脑
class GamingComputerBuilder implements ComputerBuilder {
    private Computer computer = new Computer();

    public void buildCPU() { computer.setCpu("Intel i9-13900K"); }
    public void buildRAM() { computer.setRam("32GB DDR5"); }
    public void buildStorage() { computer.setStorage("2TB NVMe SSD"); }
    public void buildGPU() { computer.setGpu("NVIDIA RTX 4090"); }
    public Computer getResult() { return computer; }
}

// 3. 具体构建器:办公电脑
class OfficeComputerBuilder implements ComputerBuilder {
    private Computer computer = new Computer();

    public void buildCPU() { computer.setCpu("Intel i5-12400"); }
    public void buildRAM() { computer.setRam("16GB DDR4"); }
    public void buildStorage() { computer.setStorage("512GB SSD"); }
    public void buildGPU() { computer.setGpu("Integrated Graphics"); }
    public Computer getResult() { return computer; }
}

// 4. 指挥者
class ComputerDirector {
    public Computer construct(ComputerBuilder builder) {
        builder.buildCPU();
        builder.buildRAM();
        builder.buildStorage();
        builder.buildGPU();
        return builder.getResult();
    }
}

// 客户端使用
public class BuilderDemo {
    public static void main(String[] args) {
        ComputerDirector director = new ComputerDirector();
        
        // 构建游戏电脑
        Computer gamingPC = director.construct(new GamingComputerBuilder());
        System.out.println("Gaming PC: " + gamingPC);
        
        // 构建办公电脑
        Computer officePC = director.construct(new OfficeComputerBuilder());
        System.out.println("Office PC: " + officePC);
    }
}

输出结果

Gaming PC: Computer [CPU=Intel i9-13900K, RAM=32GB DDR5, Storage=2TB NVMe SSD, GPU=NVIDIA RTX 4090]
Office PC: Computer [CPU=Intel i5-12400, RAM=16GB DDR4, Storage=512GB SSD, GPU=Integrated Graphics]

技术细节

1.模式组成

组件职责说明
产品最终构建的复杂对象
抽象构建器声明产品各部分的创建接口
具体构建器实现构建器接口,提供不同实现
指挥者控制构建流程,与具体构建器解耦

2.优点与缺点

优点

  • 构建与表示分离:将对象的构建过程封装在独立对象中
  • 精细控制构建过程:分步创建对象,精确控制内部结构
  • 扩展性强:新增具体构建器即可支持新对象表示
  • 避免构造函数污染:解决构造函数参数过多问题

缺点

  • 产品需具有共同点才能使用同一构建流程
  • 增加系统复杂度和类的数量
  • 对构建顺序有强依赖的产品实现难度较大

模式应用

Spring 框架中RestTemplateBuilder,用于构建复杂的 RestTemplate 实例,支持链式配置:

RestTemplate restTemplate = new RestTemplateBuilder()
    .rootUri("https://api.example.com")
    .setConnectTimeout(Duration.ofSeconds(5))
    .setReadTimeout(Duration.ofSeconds(10))
    .additionalInterceptors(new LoggingInterceptor())
    .build();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值