假設有n多個工廠,生產不同的物品,他們擁有相同的行為「生產」,但是通過呼叫「生產」的方法,獲取到的是不同的東西。
再比個打方,狗子,羊子,喵子都會叫,但叫一下卻發出不同的聲音。
實踐中有很多類似的情況,使用簡單工廠模式可以只告知「我是個什麼東西」,就可以使用相同的方法來獲取想要的值。
比如我告訴它,我是條狗,然後我想叫,它就會給我乙個「汪汪汪」;我告訴它我是只貓,然後我一叫就是「喵喵喵」。
定義乙個factory介面,具有「生產」produce這一行為
【inte***ce是go中實現多型的最主要方法。
假設我們有生產漢堡的hamfactory跟生產比薩的pizfactory。
// factory介面
type factory inte***ce
type hamfactory struct
type pizfactory struct
提供乙個例項化工廠的函式,要告知需要乙個什麼樣的工廠,即可得到這種型別的工廠的例項
// 例項化
func
newfactory
(str string
) factory
case
"pizza"
:return
&pizfactory
default
:return
nil}
}
最後將factory中定義的行為produce在各類工廠中實現即可。
// 實現produce
func
(*hamfactory)
produce()
string
func
(*pizfactory)
produce()
string
需要注意例項化的函式newfactory的返回值是乙個factory inte***ce,如果factory中定義的方法沒有全部實現,則無法通過編譯。ide下大概會被劃紅線,提示missing method,比如如果注釋掉pizfactory的produce,就會像這樣。
這裡就整個漢堡工廠,整個比薩工廠,輸出它們的產物。應該是符合期望的「produce hamburger」與「produce pizza」
func
test******factory
(t *testing.t)
輸出:
設計模式 工廠模式(簡單工廠)
一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...
Go實現設計模式 工廠模式
抽象工廠模式 工廠模式,屬於設計模式三大類之一的建立模式裡。其核心思想是提供乙個建立物件的超類,允許通過該介面指定建立子類物件的型別。從go的角度應用的說,工廠模式就是提供乙個超類,這個超類有乙個建立介面,我們可以通過這個介面獲取不同的物件,這些物件實現了同一系列的介面,所以他們可以用同乙個inte...
Go設計模式 抽象工廠模式
對照下面模板類圖作個簡單說明抽象工廠的四個角色叭。抽象工廠角色 即圖中的abstract creator,抽象工廠核心,也就是那個 超級工廠 與應用程式無關,超級工廠所建立的工廠必須實現提供的介面 具體工廠角色 即圖中的creator,用於建立具體產品物件。抽象產品角色 即圖中的abstract p...