一起學設計模式 建造者模式

2021-08-14 12:58:06 字數 1796 閱讀 5021

建造者模式(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 工廠模式

如果你還沒了解六大軟體設計原則的話,建議先谷歌下,再來學習設計模式。這對理解設計模式和記憶設計模式的經典寫法都會有很大幫助。學習設計模式,光是記寫法沒有意義,要學習的是設計思想,為什麼要這麼做,這麼做的好處是什麼。懷著這兩個問題來學習設計模式,你會發現六大軟體設計原則在設計模式中的應用,相應的也會加...