文章最前: 我是Octopus,這個名字來源於我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的動態,一起學習,共同進步。
相關文章:
- LeetCode:55. Jump Game(跳遠比賽)
- Leetcode:300. Longest Increasing Subsequence(最大增長序列)
- 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更加的安全。