我們來看以下的代碼。改造前構造實體類用重載構造器或用?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(); }