设计模式--工厂方法(Factory Method)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--工厂方法(Factory Method)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
定義一個用于創建對象的接口,讓子類決定實例化哪一個類,使得一個類的實例化延遲到子類
類圖
應用場景
1.當你不知道該使用對象的確切類型的時候;
2.當你希望為庫或框架提供擴展其內部組件的方法時。
主要優點
1.將具體產品和創建者解耦;
2.符合單一職責原則;
3.符合開閉原則。
要點總結
- Factory Method模式用于隔離類對象的使用者和具體類型之間的耦合關系。面對一個經常變化的具體類型,緊耦合關系(new)會導致軟件的脆弱
- Factory Method模式通過面向對象的手法,將所要創建的具體對象工作延遲到子類,從而實現一種擴展(而非更改)的策略,較好地解決了這種緊耦合關系
- Factory Method模式解放了“單個對象”的需求變化,缺點在于要求創建方法、參數相同
Go語言實現
工程目錄
OperatorFactory.go
package Factory//實際運行類的接口 type Operator interface {SetLeft(int)SetRight(int)Result() int }//工廠接口 type OperatorFactory interface {Create() Operator }OperatorData.go
package Factory//數據 type OperatorData struct {left, right int }//賦值 func (op *OperatorData) SetLeft(left int) {op.left = left }func (op *OperatorData) SetRight(right int) {op.right = right }PlusOpertaorFactory.go
package Factory//操作的抽象 type PlusOpertaorFactory struct {}//操作類中包含操作數 type PlusOpertaor struct {*OperatorData }//實際運行方法 func(o PlusOpertaor) Result() int {return o.right + o.left } func(PlusOpertaorFactory) Create() Operator {return &PlusOpertaor{&OperatorData{}} }SubOpertaorFactory.go
package Factory//操作的抽象 type SubOpertaorFactory struct {}//操作類中包含操作數 type SubOpertaor struct {*OperatorData }//實際運行方法 func(o SubOpertaor) Result() int {return o.left - o.right } func(SubOpertaorFactory) Create() Operator {return &SubOpertaor{&OperatorData{}} }factory_test.go
package Factoryimport ("fmt""testing" )func TestOpertaorFactory(t *testing.T) {var fac OperatorFactoryfac = PlusOpertaorFactory{}op := fac.Create()op.SetLeft(20)op.SetRight(10)fmt.Println(op.Result())fac = SubOpertaorFactory{}op = fac.Create()op.SetLeft(30)op.SetRight(20)fmt.Println(op.Result()) }總結
以上是生活随笔為你收集整理的设计模式--工厂方法(Factory Method)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--桥(Bridge)模式
- 下一篇: 设计模式--抽象工厂(Abstract