工廠方法模式是什么
工廠方法模式是一種創建型設計模式, 其在父類中提供一個創建物件的方法, 允許子類決定實體化物件的型別,
為什么用工廠方法模式
在新增一個產品時,不用去修改已有的代碼,工廠方法將創建產品的代碼與實際使用產品的代碼分離,從而能在不影響其他代碼的情況下擴展產品創建部分代碼,例如,如果需要向應用中添加一種新產品,你只需要開發新的創建者子類,然后重寫其工廠方法即可,
工廠方法模式怎么實作
factorymethod.go
package factorymethod
//Operator 是被封裝的實際類介面
type Operator interface {
SetA(int)
SetB(int)
Result() int
}
//OperatorFactory 是工廠介面
type OperatorFactory interface {
Create() Operator
}
//OperatorBase 是Operator 介面實作的基類,封裝公用方法
type OperatorBase struct {
a, b int
}
//SetA 設定 A
func (o *OperatorBase) SetA(a int) {
o.a = a
}
//SetB 設定 B
func (o *OperatorBase) SetB(b int) {
o.b = b
}
minus_operator.go
package factorymethod
//MinusOperator Operator 的實際減法實作
type MinusOperator struct {
*OperatorBase
}
//MinusOperatorFactory 是 MinusOperator 的工廠類
type MinusOperatorFactory struct{}
func (MinusOperatorFactory) Create() Operator {
return &MinusOperator{
OperatorBase: &OperatorBase{},
}
}
//Result 獲取結果
func (o MinusOperator) Result() int {
return o.a - o.b
}
plus_operator.go
package factorymethod
//PlusOperator Operator 的實際加法實作
type PlusOperator struct {
*OperatorBase
}
//PlusOperatorFactory 是 PlusOperator 的工廠類
type PlusOperatorFactory struct{}
func (PlusOperatorFactory) Create() Operator {
return &PlusOperator{
OperatorBase: &OperatorBase{},
}
}
//Result 獲取結果
func (o PlusOperator) Result() int {
return o.a + o.b
}
example.go
package factorymethod
import "fmt"
func Example() {
minus := new(MinusOperatorFactory).Create()
minus.SetB(1)
fmt.Println(minus.Result())
}
優點
- 你可以避免創建者和具體產品之間的緊密耦合,
- 單一職責原則, 你可以將產品創建代碼放在程式的單一位置, 從而使得代碼更容易維護,
- 開閉原則, 無需更改現有客戶端代碼, 你就可以在程式中引入新的產品型別,
缺點
- 在添加新的產品的時候,會導致系統類的增加,從而增加了系統的復雜性和理解難度,
- 為了系統的可擴展型,引入了抽象層,增加了系統的抽象性,和理解難度,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/455618.html
標籤:其他
上一篇:設計模式之中介者模式
下一篇:設計模式之中介者模式
