2012年10月30日 星期二

Builder Pattern

這邊的Builder Pattern 跟 GOF的design pattern 中的builder pattern 略為不同,
這是由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 !

 

沒有留言:

張貼留言

COVID-19 確診經歷紀實

原本以為真的是天選之人,就算先前家裡兩個小孩都確診都逃過了(可能有中獎但無症狀吧),不過就在2023年六月18日破解自認為天選之人的"心態",為什麼可以確認就是這天中獎的呢?因為在前都是居家上班,到人多的室內場所都會戴口罩,就剛好這天傍晚原本只想說要去附近的國...