1. 意圖
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。
2. 結構
3. 4類參與者
-
Product
定義工廠方法所創建的方法的接口 -
ConcreteProduct
實現Product方法 -
Creator
1.聲明工廠方法,該方法返回一個Product類型的對象。或者定義一個工廠方法的缺省實現,它返回一個缺省的ConcreteProduct對象
2.可以調用工廠方法以創建一個Product對象 -
ConcreteCreator
重定義工廠方法以返回一個ConcreteProduct實例
4. go代碼實現
package main
import "fmt"
// 定義接口
type Animal interface {
Cry()
}
// 實現類1
type Cat struct {}
// 實現類2
type Dog struct {}
// 實現類1方法實現
func (Cat) Cry() {
fmt.Println("miao")
}
// 實現類2方法實現
func (Dog) Cry() {
fmt.Println("wang")
}
// 工廠類
type AnimalFactory struct {}
// 工廠類方法實現
func (AnimalFactory) getAnimalObj(animalType string) Animal {
var animal Animal
switch animalType {
case "cat":
animal = new(Cat)
case "dog":
animal = new(Dog)
default:
panic("no this kind animal")
}
return animal
}
// 測試
func main() {
new(AnimalFactory).getAnimalObj("cat").Cry()
new(AnimalFactory).getAnimalObj("dog").Cry()
}
[參考文檔1]《設計模式》-機械工業出版社
3.3節 FACTORY METHOD(工廠方法)——對象創建型模式
參考文檔2