李雷喜歡上了韓梅梅,他知道韓梅梅喜歡吃漢堡,於是就想買漢堡給她吃,但李雷不確定韓梅梅喜歡的是肯德基的漢堡還是麥當勞的漢堡,怎樣幫助他呢?
最直觀和最簡單的實現就是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...
設計模式 建立型 簡單工廠
之前學習了設計模式的原則,下面我們正式學習這些模式。設計模式分為了三個大類分別是建立型模式 結構型模式 和行為型模式。首先建立型模式 顧名思義他是用來描述如何建立物件的 建立型模型的分類 簡單工廠模式 抽象工程模式,單例模式 原型模式 建造者模式。簡單工廠 提供了專門的工廠類用於建立物件 將物件的建...