1. 程式人生 > 其它 >代理模式五:構建者模式

代理模式五:構建者模式

簡介

將一個複雜物件的構建與其表示分離,使得同樣的構建過程可以建立不同的表示

使用場景

當建立一個物件時,引數超過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

XFS