1. 意圖
提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
2. 結構
3. 5種參與者
-
抽象工廠類(AbstractFactory)
聲明一個創建抽象產品對象的操作接口 -
具體工廠類(ConcreteFactory)
實現創建具體產品對象的操作 -
抽象產品類(AbstractPoduct)
爲一類產品聲明一個接口 -
具體產品類(ConcreteProduct)
定義一個將被相應的具體工廠創建的產品對象
實現AbstractPoduct接口 -
Client
僅使用由AbstractFactory和AbstractProduct類聲明的接口
4. go代碼實現
package main
import "fmt"
// 抽象產品類--爲一類產品聲明一個接口
type AbstractProduct interface {
SaveProduct()
}
// 抽象工廠類--聲明一個創建抽象產品對象的操作接口
type AbstractFactory interface {
CreateAbstractProduct() AbstractProduct
}
// 具體產品類--定義一個將被相應的具體工廠創建的產品對象
type ConcreteProduct struct{}
func (*ConcreteProduct) SaveProduct() { // 實現AbstractPoduct接口
fmt.Println("Product is created")
}
// 具體工廠類--實現創建具體產品對象的操作
type ConcreteFactory struct{}
func (*ConcreteFactory) CreateConcreteProduct() AbstractProduct {
return &ConcreteProduct{}
}
[參考文檔1]《設計模式》-機械工業出版社
3.1節 ABSTRACT FACTORY(抽象工廠)——對象創建型模式
參考文檔2