建造者模式

爲何要使用建造者模式?

  1. 將複雜對象的構造和展現相分離,使用不一樣的建造者的實現能獲得不一樣的結果
  2. 避免過多的構造函數和setter方法
  3. 更方便構造不可變對象,線程安全

ps:使用lombok的@Builder註解能夠自動給咱們生成建造者模式代碼java

 

 

package com.kuaikan.sample.springboot.aop;

public class User {
    private final int age; // optional
    private final String phone; // optional
    private final String address; // optional

    private User(UserBuilder builder) {
        this.age = builder.age;
        this.phone = builder.phone;
        this.address = builder.address;
    }

    public int getAge() {
        return age;
    }

    public String getPhone() {
        return phone;
    }

    public String getAddress() {
        return address;
    }

    public static class UserBuilder {
        private int age;
        private String phone;
        private String address;

        private UserBuilder() {
        }

        public static UserBuilder newBuilder() {
            return  new UserBuilder();
        }

        public UserBuilder age(int age) {
            this.age = age;
            return this;
        }

        public UserBuilder phone(String phone) {
            this.phone = phone;
            return this;
        }

        public UserBuilder address(String address) {
            this.address = address;
            return this;
        }

        public User build() {
            return new User(this);
        }

    }

    public static void main(String[] args) {
        User user = UserBuilder.newBuilder()
                .address("")
                .age(11)
                .phone("123")
                .build();


    }
}

 

建造者模式優勢

  • User構造方法是私有的,這意味着該類不能在客戶端代碼裏直接實例化。
  • 該類如今又是不可變的了。全部屬性都是final類型的,在構造方法裏面被賦值。另外,咱們只爲它們提供了getter方法。
  • builder類使用流式接口風格,讓客戶端代碼閱讀起來更容易(咱們立刻就會看到一個它的例子)。
  • builder類構造方法只接收必須屬性,爲了確保這些屬性在構造方法裏賦值,只有這些屬性被定義成final類型。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息