關於lombok中的Builder註解解析

文章最前: 我是Octopus,這個名字來源於我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的動態,一起學習,共同進步。

相關文章:

  1. LeetCode:55. Jump Game(跳遠比賽)
  2. Leetcode:300. Longest Increasing Subsequence(最大增長序列)
  3. LeetCode:560. Subarray Sum Equals K(找出數組中連續子串和等於k)

用了@builder註解感覺很神奇,所有就看了下Builder的實現;

package com.example.demo.mapdemo;


import lombok.Builder;
import lombok.Data;

/**
 * 使用builder註解
 *
 * @author: zhangyu
 */
@Data
@Builder
public class Person{
    int age;
    int grade;
    String name;
}

自己手動按照這個例子實現了一下Builder註解的作用。

**
 * 實現builder註解的作用
 *
 * @author: zhangyu
 */

public class Person {
    int age;
    int grade;
    String name;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static class Builder {
        private String name;
        private int age;
        private int grade;

        public Builder(String name) {
            this.name = name;
        }

        public Builder age(int val) {
            age = val;
            return this;
        }

        public Builder grade(int val) {
            grade = val;
            return this;
        }

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

    private Person(Builder builder) {
        age = builder.age;
        grade = builder.grade;
    }
}

         這個是Builder的實現方式;它既能保證重疊構造器模式那樣的安全性,也能保證像javabean模式那麼好的可讀性;不直接生成自己想要的對象,而是讓builder對象上調用類似於setter方法,來設置每個相關的可選參數,最後,客戶端調用無參數的build。

Person person = Person.builder().age(22).name("zhangyu").grade(67).build(); System.out.println(person);

 這樣的方式,易於閱讀,builder模式模擬了具體名的可選參數,就行python一樣;

      當時使用builder也有它自身的不足,爲了創建對象,必須先構建它的構建器,如果再類的構造器或者靜態工廠中有多個參數,設計這樣類型時候,builder模型就是一個不錯的選擇,特別是當大多數參數是可選的,與使用傳統的重疊結構構造器模式相比,使用builder模式的代碼更容易閱讀和編寫;構造器也比javabeans更加的安全。

             

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章