這是由java語言大師Josh Bloch所提出,主要用來建構immutable物件,透過一個static 的inner class來控制Outer class的屬性,模式如下:
class SearchCriteria {
private final String firstName;
...
public String getFirstName() { return firstName; }
...private SearchCriteria(Builder builder){
this.finstName = builder.firstName;
....
}
public static class Builder {
private String firstName;
...
public SearchCriteria firstName(String firstName) { this.firstName = firstName; return this; }
...
public SearchCriteria build() { return new ( this ); }
}
}
使用時就是
SearchCriteria criteria = new SearchCriteria.Builder().firstName("Joseph")...一直點下去再.build();
這個Pattern有啥好處?
在對於要建立一個不可變物件時很好用,因為
SearchCriteria 物件在生成後沒有人可以動到它內部的屬性,可達想要的immutable物件
的特性(如:thread safe 等等),
其次在於如果constructor 有多個參數要設定,其中又有幾個是可有可無,這種建構子會
很多,整個class會落落長(台語,很多很長的意思),
Pattern的好處就是同樣達到目地,但可以漂亮又有彈性的達成,在維護和擴充上都有幫助。
補充說明:Builder 的設值只會更改 Builder 的內容, SearchCriteria 這個物件直到
Builder的build() 執行後才產生,所以它生出來的是 immutable !
這個知識本來從沒聽過,在換工作後,和高手一起工作時,經過他的提點再自己google
仔細了解才體會這個pattern !
沒有留言:
張貼留言