工廠方法模式是什麼 工廠方法模式是一種創建型設計模式, 其在父類中提供一個創建對象的方法, 允許子類決定實例化對象的類型。 為什麼用工廠方法模式 在新增一個產品時,不用去修改已有的代碼。工廠方法將創建產品的代碼與實際使用產品的代碼分離,從而能在不影響其他代碼的情況下擴展產品創建部分代碼。例如,如果需 ...
工廠方法模式是什麼
工廠方法模式是一種創建型設計模式, 其在父類中提供一個創建對象的方法, 允許子類決定實例化對象的類型。
為什麼用工廠方法模式
在新增一個產品時,不用去修改已有的代碼。工廠方法將創建產品的代碼與實際使用產品的代碼分離,從而能在不影響其他代碼的情況下擴展產品創建部分代碼。例如,如果需要嚮應用中添加一種新產品,你只需要開發新的創建者子類,然後重寫其工廠方法即可。
工廠方法模式怎麼實現
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())
}
優點
- 你可以避免創建者和具體產品之間的緊密耦合。
- 單一職責原則。 你可以將產品創建代碼放在程式的單一位置, 從而使得代碼更容易維護。
- 開閉原則。 無需更改現有客戶端代碼, 你就可以在程式中引入新的產品類型。
缺點
- 在添加新的產品的時候,會導致系統類的增加,從而增加了系統的複雜性和理解難度。
- 為了系統的可擴展型,引入了抽象層,增加了系統的抽象性,和理解難度。