簡介 簡單工廠模式又稱為靜態工廠模式,屬於創建型模式,但不屬於GOF23設計模式。由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。 簡單工廠適用場景:工廠類負責創建的對象比較少;客戶端只需要知道傳入工廠類的參數,對於如何創建對 ...
簡介
簡單工廠模式又稱為靜態工廠模式,屬於創建型模式,但不屬於GOF23設計模式。由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。
簡單工廠適用場景:工廠類負責創建的對象比較少;客戶端只需要知道傳入工廠類的參數,對於如何創建對象的邏輯並不關心。
簡單工廠優缺點:
- 優點:只需要傳入一個正確的參數,就可以獲取你所需要的對象,而無需知道其細節創建。
- 缺點:工廠類的職責相對過重,增加新的產品,需要修改工廠類的判斷邏輯,違背了開閉原則。
示例代碼
Go
go
語言沒有構造函數,所以一般會定義NewXXX
函數來初始化相關類。NewXXX
函數返回介面時就是簡單工廠模式,也就是說Go
的一般推薦做法就是簡單工廠,
simplefactory/demo.go
package simplefactory
import "fmt"
type API interface {
Say(name string) string
}
func NewAPI(t int) API {
if t == 1 {
return &hiAPI{}
} else if t == 2 {
return &helloAPI{}
}
return nil
}
type hiAPI struct{}
func (*hiAPI) Say(name string) string {
return fmt.Sprintf("hi, %s", name)
}
type helloAPI struct {}
func (*helloAPI) Say(name string) string {
return fmt.Sprintf("hello, %s", name)
}
單元測試:simplefactory/demo_test.go
package simplefactory
import (
"testing"
)
func TestType1(t *testing.T) {
api := NewAPI(1)
s := api.Say("zhangsan")
if s != "hi, zhangsan" {
t.Error("test failed")
}
}
func TestType2(t *testing.T) {
api := NewAPI(2)
s := api.Say("zhangsan")
if s != "hello, zhangsan" {
t.Error("test failed")
}
}
主方法調用 main.go
package main
import (
"fmt"
"tmpgo/simplefactory"
)
func main() {
api := simplefactory.NewAPI(1)
fmt.Println(api.Say("zhangsan"))
}
Python
class GreetAPI:
def Say(self, name):
pass
class HiAPI(GreetAPI):
def Say(self, name):
return f"Hi, {name}"
class helloAPI(GreetAPI):
def Say(self, name):
return f"Hello, {name}"
def NewGreetAPI(t: int):
if t == 1:
return HiAPI()
elif t == 2:
return helloAPI()
else:
raise Exception(f"Unknown type: {t}")
if __name__ == "__main__":
api = NewGreetAPI(2)
print(api.Say("zhangsan"))
參考
本文來自博客園,作者:花酒鋤作田,轉載請註明原文鏈接:https://www.cnblogs.com/XY-Heruo/p/18024167