代理模式五:構建者模式
阿新 • • 發佈:2021-08-19
簡介
將一個複雜物件的構建與其表示分離,使得同樣的構建過程可以建立不同的表示
使用場景
當建立一個物件時,引數超過4個且引數可選擇,可以考慮使用
程式碼
- 實現類
public class Computer implements Serializable { private final String cpu; //必須 private final String ram; //必須 private final String usbCount; //可選 private final String keyboard; //可選 private final String display; //可選 public Computer(Builder computer) { this.cpu = computer.cpu; this.ram = computer.ram; this.usbCount = computer.usbCount; this.keyboard = computer.keyboard; this.display = computer.display; } public static class Builder{ private String cpu; //必須 private String ram; //必須 private String usbCount; //可選 private String keyboard; //可選 private String display; //可選 public Builder(String cpu, String ram) { this.cpu = cpu; this.ram = ram; } public Builder setUsbCount(String usbCount) { this.usbCount = usbCount; return this; } public Builder setKeyboard(String keyboard) { this.keyboard = keyboard; return this; } public Builder setDisplay(String display) { this.display = display; return this; } public Computer build() { return new Computer(this); } } @Override public String toString() { return "Computer{" + "cpu='" + cpu + '\'' + ", ram='" + ram + '\'' + ", usbCount='" + usbCount + '\'' + ", keyboard='" + keyboard + '\'' + ", display='" + display + '\'' + '}'; } }
- 測試類
public class BuilderTest {
public static void main(String[] args) {
Computer build = new Computer.Builder("因特爾", "三星")
.setUsbCount("2")
.build();
System.out.println(build);
}
}
Gitee地址
https://gitee.com/zhuayng/foundation-study.git
參考
https://blog.csdn.net/ShuSheng0007/article/details/86619675