日常总能看到用 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)