设计模式--建造者(Builder)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--建造者(Builder)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
將一個復雜對象的創建與他的表示分離,使得同樣的構建過程可以創建不同的表示
類圖
應用場景
1.需要生成的對象具有復雜的內部結構;
2.需要生成的對象內部屬性本身相互依賴;
3.與不可變對象配合使用;
優點
1.建造者獨立,易擴展;
2.便于控制細節風險;
要點總結
- Builder模式主要用于“分步驟構建一個復雜的對象”,在這其中“分步驟”是一個穩定的算法,而復雜對象的各個部分則經常變化
- 變化點在哪里,封裝哪里----Builder模式主要在于應對“復雜對象各個部分”的頻繁需求變動,其缺點在于難以應對“分步驟構建算法”的需求變動
Go語言代碼實現
工程目錄
Builder.go
package Buildertype Builder interface {Part1()Part2()Part3() }type Director struct {builder Builder //建造者的接口 }//創造接口 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()) }總結
以上是生活随笔為你收集整理的设计模式--建造者(Builder)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--单例(Singleton)模
- 下一篇: 设计模式--原型(Prototype)模