Golang設計模式 建立型 簡單工廠

2021-08-07 04:59:15 字數 1255 閱讀 7226

李雷喜歡上了韓梅梅,他知道韓梅梅喜歡吃漢堡,於是就想買漢堡給她吃,但李雷不確定韓梅梅喜歡的是肯德基的漢堡還是麥當勞的漢堡,怎樣幫助他呢?

最直觀和最簡單的實現就是if+else:

if prefer == "kfc"  else

if prefer == "mcdonalds"

這個實現的問題是客戶端關注了產品(漢堡)建立的全過程,且當擴充套件產品種類時需要修改客戶端**,違反了開放-封閉原則(對增加開放,對修改封閉)。

那麼有沒有更好的實現呢?

簡單工廠通過定義乙個工廠類,並提供建立產品的方法,將客戶端從建立具體產品的尷尬局面中擺脫出來,客戶端只需要告知產品型別即可,產品的具體建立由工廠完成。

以引例的漢堡工廠為例,產品即為漢堡,這個是乙個抽象型別,根據產品型別的不同,我們分別定義兩個具體產品,即肯德基的漢堡和麥當勞的漢堡:

type

hamburger inte***ce

type

kfchamburger struct{}

func (h kfchamburger) deliver()

type

mcdonaldshamburger struct{}

func (h mcdonaldshamburger) deliver()

漢堡工廠則根據需要生產指定型別的漢堡:

type hamburge***ctory struct{}

func (f hamburge***ctory) createhamburger(prefer string) hamburger

}

於是,客戶端再也不關注產品的具體建立過程了,而是告訴工廠「我需要什麼,你就給我生產什麼」:

func

main()

hamburger

.deliver()

}

$ ./******_factory.bin -prefer kfc

this is a hamburger from kfc.

$ ./******_factory.bin -prefer mcdonalds

this is a hamburger from mcdonalds.

使用類圖表示如下:

缺點

完整**: 簡單工廠

設計模式 建立型 簡單工廠模式

建立型模式中工廠模式有三兄弟,先從簡單工廠講起。工廠模式中包含了產品與工廠兩個物件,其中產品是是乙個個具體的物件,而工廠負責生產這些產品。例如現在我們的需求是有兩個食品要在食品廠加工。兩個食品分別叫做麵包和巧克力,要在食品廠加工。通過需求分析出應該有如下幾個類,麵包類 巧克力類 食品加工廠類。由於麵...

建立型設計模式簡單對比

知識點 prototype 採用的 原型轉殖 的方法來解決這個問題。可以認為是乙個特殊的工廠類 factory method,abstract factory prototype 這三個建立型模式相互轉換的難度很低。能用abstract factory實行的,我們肯定也可以用factory meth...

設計模式 建立型 簡單工廠

之前學習了設計模式的原則,下面我們正式學習這些模式。設計模式分為了三個大類分別是建立型模式 結構型模式 和行為型模式。首先建立型模式 顧名思義他是用來描述如何建立物件的 建立型模型的分類 簡單工廠模式 抽象工程模式,單例模式 原型模式 建造者模式。簡單工廠 提供了專門的工廠類用於建立物件 將物件的建...