建造者模式

2022-05-09 21:12:47 浏览数 (3)

日常总能看到用 build 方法创建一个对象,当时就在想问什么这么麻烦,直接 new 一个不可以吗?

1. 建造者模式(Builder Pattern)

建造者模式是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它是构造方法的一种代替,当构造函数的参数多于4个,且部分参数是可选时可以考虑使用该模式

注意与工厂模式的区别:

  • 建造者:更注重方法的调用顺序,内容(组装对象),创建对象是不同的
  • 工厂:注重创建对象(生产对象),且常见对象都一样

2. 流程

参考并稍加修改开源框架 Mybatis 如何使用 非传统 的建造者模式,下面用 Computer 类作为创建的对象

2.1 创建的对象类

代码语言:javascript复制
public class Computer {

    private String cpu;
    private String ram;
    private String vga;
    private String hdd;

    public Computer(String cpu, String ram, String vga, String hdd) {
        this.cpu = cpu;
        this.ram = ram;
        this.vga = vga;
        this.hdd = hdd;
    }
}

2.2 建造器

代码语言:javascript复制
public class ComputerBuilder {

    public ComputerBuilder() {
    }

    public Computer build(String cpu, String ram) {
        return this.build(cpu, ram, null, null);
    }

    public Computer build(String cpu, String ram, String vga) {
        return this.build(cpu, ram, vga, null);
    }

    public Computer build(String cpu, String ram, String vga, String hdd) {
        return new Computer(cpu, ram, vga, hdd);
    }
}

2.3 测试

代码语言:javascript复制
public static void main(String[] args) {
    Computer computer = new ComputerBuilder().build("i5", "8g");
    System.out.println(computer);
}

// Computer{cpu='i5', ram='8g', vga='null', hdd='null'}

参考: new SqlSessionFactoryBuilder().build(inputStream)

0 人点赞