有時候構建乙個複雜的物件,需要經過好幾步的處理,比如常用的建造者模式(builder pattern)
屬於建立型模式
的一種,將多個簡單物件構建成乙個複雜的物件,構建過程抽象化,不同實現方法可以構造出不同表現(屬性)的物件,還提供了一種更加優雅構建物件的方式…
stringbuffer、stringbuilder、以及swagger(一種介面文件)
,都是以這種模式構建物件的
優點
缺點
適用場景
相關模式
抽象工廠模式與建造者模式相似
,因為它也可以建立複雜物件。主要的區別是建造者模式
著重於一步步得構造出複雜物件。而抽象工廠模式
著重於多個系列的產品物件(簡單的或是複雜的)。建造者
是在最後的一步返回物件,而對於抽象工廠來說,物件是立即返回的。
傳統方式
public
class
summoner
}
簡單的物件我們可以使用下面這種方式,因為屬性較少這種方式還看的,但不幸的是如果要增加欄位或我們還需要去擴充套件構造方法,且可讀性
不好,相同型別的情況下在一定程度上混淆視聽了
summoner s1 = new summoner("德瑪","戰士","戰爭雷霆");
為什麼不呼叫無引數的建構函式,通過setter
方法來減輕問題。
解答:如果程式設計師忘記呼叫乙個特定的setter
方法會發生什麼?我們可能得到的是乙個部分初始化的物件,而且編譯器也不會檢測出任何問題。
使用模式在我們的示例中,改造下
召喚師類
public
class
summoner
protected
static
class
builder
protected builder type(string type)
protected builder innate(string innate)
protected summoner build()
}}public
class
builderdemo
}
建造者模式
讓我們寫的**更具可讀性,可理解為建立複雜的物體。它往往是實現乙個連貫的操作,從而更加直觀,此處由於型別較為單一差距不大,但遇到複雜物件構建差距就立竿見影了
summoner
summoner
summoner
我們通過乙個簡單的**例子開始,慢慢變得複雜。然後使用builder模式
來解決我們發現的問題。
如果你發現自己在乙個情況下,你不斷新增新引數的建構函式,使得**變得容易出錯,很難讀,也許可以考慮使用乙個builder
重構你的**。
全文**:
battcn開源群(適合新手):391619659
一起學設計模式 組合模式
組合模式 composite pattern 屬於結構型模式的一種,組合多個物件形成樹形結構來表示部分 整體的結構層次,對單個物件 葉子物件 和組合物件 容器物件 的使用具有一致性 組合模式對單個物件 葉子物件 和組合物件 容器物件 具有一致性,它將物件組織到樹結構中,可以用來描述整體與部分的關係。...
一起學設計模式 外觀模式
外觀模式 facade pattern 屬於結構型模式的一種,為子系統中的一組介面提供乙個統一的入口,它通過引入乙個外觀角色來簡化客戶端與子系統之間的互動.外觀模式是一種使用頻率非常高的結構型設計模式,當你要為乙個複雜子系統提供乙個簡單介面時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時...
一起學設計模式 02 工廠模式
如果你還沒了解六大軟體設計原則的話,建議先谷歌下,再來學習設計模式。這對理解設計模式和記憶設計模式的經典寫法都會有很大幫助。學習設計模式,光是記寫法沒有意義,要學習的是設計思想,為什麼要這麼做,這麼做的好處是什麼。懷著這兩個問題來學習設計模式,你會發現六大軟體設計原則在設計模式中的應用,相應的也會加...