Builder模式,翻译过来中文是构建器、建造器都可以。定义为:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。同样的构建过程是指同样的构建方式,比如汽车组装的过程是 组装大架子(); 组装轮胎(); 喷漆(); 这样一个过程,那最后组装完成下线的是一辆本田还是一辆自行车,取决于你调用构建过程所传入的Builder类型。
经典的Builder模式主要有四个参与者:
Product:被构造的复杂对象,ConcreteBuilder用来创建该对象的内部表示,并定义它的装配过程。
Builder:抽象接口,用来定义创建Product对象的各个组成部件的操作。
ConcreteBuilder:Builder接口的具体实现,可以定义多个,是实际构建Product对象的地方,同时会提供一个返回Product的接口。
Director:Builder接口的构造器和使用者。
直接代码说话
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 public class User { private final String firstName; private final String lastName; private final String gender; private final int age; private final String phoneNo; private User(Builder builder) { firstName = builder.firstName; lastName = builder.lastName; gender = builder.gender; age = builder.age; phoneNo = builder.phoneNo; } public static final class Builder { private int age; private String firstName; private String lastName; private String gender; private String phoneNo; public Builder() { } public Builder age(int val) { age = val; return this; } public Builder firstName(String val) { firstName = val; return this; } public Builder lastName(String val) { lastName = val; return this; } public Builder gender(String val) { gender = val; return this; } public Builder phoneNo(String val) { phoneNo = val; return this; } public User build() { return new User(this); } } @Override public String toString() { return "User{" + "firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + ", gender='" + gender + '\'' + ", age=" + age + ", phoneNo='" + phoneNo + '\'' + '}'; } } 使用方法: User user = new User.Builder().firstName("Lison").lastName("Liou").age(32).phoneNo("15066796811").build(); 构造器与链式调用,得劲儿。 如果用Android Studio等Intellij全家桶的话,推荐插件:InnerBuilder,自动对Bean生成构造器模式模式的代码, 好东西。