我们来看以下的代码。改造前构造实体类用重载构造器或用 setter 对变量进行赋值,一旦变量变多则需要对每个变量进行 set 赋值,并且有可能会赋值错对象。
private static void test() {//1.构造器赋值Task task1 = new Task("2023000000009439","2023000000009435","testType");//2.set赋值Task task2 = new Task();task2.setId("2023000000009439");task2.setBizNo("2023000000009435");task2.setSubType("testType");//...变量超级多
}
改造步骤
-
在 Bean 类里面新建一个静态内部类:XxxBuilder;
-
把 Bean 类所有参数复制到 XxxBuilder,然后在 XxxBuilder 新建必须参数的构造器,其他参数使用变量名作为方法然后返回自身(this)以便形成链式调用;
-
在 Bean 类里面新建一个接收 XxxBuilder 参数的私有构造器,避免使用 new 创建对象;
-
在 XxxBuilder 类新建一个 build 方法开始构建 Bean 类,作为链式调用的结束。
public class Task{//省去变量public TaskDP(TaskBuilder taskBuilder) {this.bizNo = taskBuilder.bizNo;this.subType = taskBuilder.subType;this.id = taskBuilder.id;}public static class TaskBuilder{private String bizNo;private String subType;private String id;public TaskBuilder bizNo(String bizNo){this.bizNo = bizNo;return this;}public TaskBuilder id(String id){this.id = id;return this;}public TaskBuilder subType(String subType){this.subType = subType;return this;}public Task build(){return new Task(this);}}
private static void test() {Task task = new Task.TaskBuilder().id("202306060000000001").bizNo("202306060000000001").subType("testType").build(); }