首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >生成器模式Builder

生成器模式Builder

原创
作者头像
用户12244701
发布2026-03-12 15:38:55
发布2026-03-12 15:38:55
70
举报

考点

意图

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

适用性

  1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方是时
  2. 当构造过程必须允许呗构造的对象有不同的表示时

代码语言:txt
复制
// 产品类:我们要构建的复杂对象
class Computer {
    // 必需参数
    private String cpu;
    private String gpu;
    // 可选参数
    private int memory;
    private int disk;

    // 构造器私有:只能通过建造者创建对象
    private Computer(Builder builder) {
        this.cpu = builder.cpu;
        this.gpu = builder.gpu;
        this.memory = builder.memory;
        this.disk = builder.disk;
    }

    // 生成器类(静态内部类):核心建造者
    public static class Builder {
        // 必需参数(建造者必须和产品保持一致)
        private String cpu;
        private String gpu;
        // 可选参数(可以给默认值)
        private int memory = 8;
        private int disk = 256;

        // 构造方法:传入**必填**参数
        public Builder(String cpu, String gpu) {
            this.cpu = cpu;
            this.gpu = gpu;
        }

        // 链式调用方法:设置可选参数,返回 Builder 自身
        public Builder memory(int memory) {
            this.memory = memory;
            return this;
        }

        public Builder disk(int disk) {
            this.disk = disk;
            return this;
        }

        // 构建方法:返回最终的产品对象
        public Computer build() {
            return new Computer(this);
        }
    }

    // 打印信息(方便测试)
    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", gpu='" + gpu + '\'' +
                ", memory=" + memory +
                ", disk=" + disk +
                '}';
    }
}

// 测试类
public class BuilderTest {
    public static void main(String[] args) {
        // 链式调用创建对象,可读性极强
        Computer computer1 = new Computer.Builder("i9", "RTX4090")
                .memory(32)
                .disk(1024)
                .build();

        // 只传必填参数,使用默认可选值
        Computer computer2 = new Computer.Builder("i5", "RTX3060").build();

        System.out.println(computer1);
        System.out.println(computer2);
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 考点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档