最近一直在寫框架,這個系列也好久沒更新了,抽時間更新一篇~
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.引用型別在...