golang設計模式之建造者模式

2021-09-11 17:06:56 字數 1795 閱讀 1720

最近一直在寫框架,這個系列也好久沒更新了,抽時間更新一篇~

wiki:建造者模式(builder pattern):將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

直白一點的說,就是將我們在開發過程中遇到的大型物件,拆分成多個小物件,然後將多個小物件組裝成大物件,並且對外部隱藏建造過程.

建造者模式由一下4個部分組成

(圖源網路)

從上面兩張圖可以看出建造者模式的使用流程:

建立大型產品建造者

建立指揮者

將建造者傳入指揮者物件中

由指揮者指揮建造者建立物件,並返回

說乙個網上說爛了的組裝汽車的栗子吧,

比如說我是個老司機,但是除了開車還想造車,但是車的構造實在是太複雜了,那麼我們就可以將車拆分...

4個輪子、1個底盤、1個駕駛位...

好了,為了簡便,就造這三個吧,先造個爬犁出來...

所以我需要乙個大型專案構造者carbuilder:

type carbuilder struct 

func

(cb *carbuilder)

getresult

()inte***ce

{} func

(cb *carbuilder)

newproduct()

func

(cb *carbuilder)

buildwheels()

func

(cb *carbuilder)

buildchassis()

func

(cb *carbuilder)

buildseat()

複製**

這個建造者實現了builder介面:

type builder inte***ce   // 獲取建造好的產品

}複製**

下面要把具體建造者傳入指揮者:

type director struct 

func

(d *director)

setbuilder

(builder builder)

複製**

現在指揮者和建造者都已經準備好了,可以進行建造了,呼叫指揮者的generate()方法:

func

(d *director)

generate

() *car

複製**

這樣,就得到了我們需要的car物件:

func

main()

複製**

上面的**,是將乙個本來就不是很複雜的物件,強行拆分,只是將其中的字段設為最簡單的string型別,實際上,這些字段應該是更小的物件結構體,然後還可以繼續把這些小結構體繼續拆分,拆分為最小單元,這樣才是結構最清晰的思路.

本來想舉乙個應用在實際專案中的栗子的,但是框架還沒有寫完,這樣,先占個坑,等bingo框架完成後我會再來補充這一部分.

上述**均放在 golang-design-patterns 這個倉庫中

打個廣告,推薦一下自己寫的 go web框架 bingo,求star,求pr ~

四 JavaScript設計模式之建造者模式

一 建造者模式模式概念 建造者模式可以將乙個複雜的物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。也就是說如果我們用了建造者模式,那麼使用者就需要指定需要建造的型別就可以得到它們,而具體建造的過程和細節就不需要知道了。建造者模式實際就是乙個指揮者,乙個建造者,乙個使用指揮者呼叫具體建...

建造者模式 golang

在此篇中,我們將練習實現建造者模式。其中例子大致是菜鳥教程的例子翻版,此處採用golang實現。對於具體介紹大家可以去菜鳥教程學習 packagemain import fmt funcmain hotdog packageitem coke packageitem m package m.name...

設計模式之建造者

這兩天事太多了,沒來的及更新。今天早點更新。今天扯建造者模式。大家都知道乙個物件的生成是有過程的。表面上我們看的是new,其實編譯器是有一定細節指令 的。比如我們建房子,需要挖地基,砌牆,上頂等。這些操作步驟不需要我們動手,交給泥瓦工就行了。我們提供的只是,這個宅基地地方,材料等而已。2.引用型別在...