设计模式学习--建造者模式

建造者模式是一种设计模式,它将对象的构建和表示分离,使得创建复杂对象的过程更加灵活。通过链式调用的方式,可以方便地构建不同配置的对象,如在示例中展示了如何使用建造者模式实例化Computer。这种模式常用于参数众多的构造方法,以减少构造方法的复杂性。Spring中的BeanDefinitionBuilder和Mybatis的SqlSessionFactoryBuilder是建造者模式在开源项目中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

  • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(如何一步一步创建一个包含多个组件的对象)。
  • 用户只需要指定建造的类型,就可以得到它们,建造过程及细节不需要知道

适用场景

  • 一个对象,构造方法参数特别多。可以考虑使用建造者模式,将构建与表示分离,减少构造方法的参数。

链式实现

下面是 建造者模式链式实现的代码,省略了getter和setter。

// 使用建造者模式实现Computer的实例化
// 如果使用构造方法初始化,参数将有5个,会使构造方法的使用过于复杂
public class Computer {
    private String cpu;
    private String ram;
    private int usbCount;
    private String keyboard;
    private String display;

    private Computer(Builder builder) {
        this.cpu = builder.cpu;
        this.ram = builder.ram;
        this.usbCount = builder.usbCount;
        this.keyboard = builder.keyboard;
        this.display = builder.display;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", ram='" + ram + '\'' +
                ", usbCount=" + usbCount +
                ", keyboard='" + keyboard + '\'' +
                ", display='" + display + '\'' +
                '}';
    }

    public static class Builder {
        private String cpu;
        private String ram;
        private int usbCount;
        private String keyboard;
        private String display;

        public Builder setCpu(String cpu) {
            this.cpu = cpu;
            return this;
        }

        public Builder setRam(String ram) {
            this.ram = ram;
            return this;
        }

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

        public Builder setKeyboard(String keyboard) {
            this.keyboard = keyboard;
            return this;
        }

        public Builder setDisplay(String display) {
            this.display = display;
            return this;
        }

        public Computer build() {
            return new Computer(this);
        }
    }
}

实例化 Computer代码:

Computer pc = new Computer.Builder()
                	.setCpu("i7")
                	.setRam("16GB")
                	.setUsbCount(2)
                	.setKeyboard("cherry")
	                .setDisplay("dell 27inch")
                	.build();
System.out.println(pc);

建造者模式在开源代码中的使用:

  • Spring: BeanDefinitionBuild
  • Mybatis: SqlSessionFactoryBuilder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值