设计模式--建造者(Builder)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--建造者(Builder)模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模式定義
將一個(gè)復(fù)雜對(duì)象的創(chuàng)建與他的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
類圖
應(yīng)用場(chǎng)景
1.需要生成的對(duì)象具有復(fù)雜的內(nèi)部結(jié)構(gòu);
2.需要生成的對(duì)象內(nèi)部屬性本身相互依賴;
3.與不可變對(duì)象配合使用;
優(yōu)點(diǎn)
1.建造者獨(dú)立,易擴(kuò)展;
2.便于控制細(xì)節(jié)風(fēng)險(xiǎn);
要點(diǎn)總結(jié)
- Builder模式主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”,在這其中“分步驟”是一個(gè)穩(wěn)定的算法,而復(fù)雜對(duì)象的各個(gè)部分則經(jīng)常變化
- 變化點(diǎn)在哪里,封裝哪里----Builder模式主要在于應(yīng)對(duì)“復(fù)雜對(duì)象各個(gè)部分”的頻繁需求變動(dòng),其缺點(diǎn)在于難以應(yīng)對(duì)“分步驟構(gòu)建算法”的需求變動(dòng)
Go語言代碼實(shí)現(xiàn)
工程目錄
Builder.go
package Buildertype Builder interface {Part1()Part2()Part3() }type Director struct {builder Builder //建造者的接口 }//創(chuàng)造接口 func NewDirector (builder Builder) *Director {return &Director{builder: builder} }func (d *Director) Makedata(){d.builder.Part1()d.builder.Part2()d.builder.Part3() }StringBuilder.go
package Buildertype StringBuilder struct {result string }func (sb *StringBuilder) Part1 () {sb.result += "1" }func (sb *StringBuilder) Part2 () {sb.result += "2" }func (sb *StringBuilder) Part3 () {sb.result += "3" }func (sb *StringBuilder) GetResult() string {return sb.result }IntBuilder.go
package Buildertype IntBuilder struct {result int64 }func (ib *IntBuilder) Part1 () {ib.result += 1 }func (ib *IntBuilder) Part2 () {ib.result += 2 }func (ib *IntBuilder) Part3 () {ib.result += 3 }func (ib *IntBuilder) GetResult() int64 {return ib.result }Builder_test.go
package Builderimport ("fmt""testing" )func TestIntBuilder(t *testing.T) {sbuilder := &StringBuilder{}dict := NewDirector(sbuilder)dict.Makedata()fmt.Println(sbuilder.GetResult())ibuilder := &IntBuilder{}dict = NewDirector(ibuilder)dict.Makedata()fmt.Println(ibuilder.GetResult()) }總結(jié)
以上是生活随笔為你收集整理的设计模式--建造者(Builder)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--单例(Singleton)模
- 下一篇: 设计模式--原型(Prototype)模