本人已經部落格移至南京交通設施****
:從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(
static factory method
)模式。
此模式一般用於例項化類,通過乙個引數確定所要是例項化的類。
在此模式中,存在著乙個工廠類,他負責對整個模式進行控制。在此類中存在邏輯判斷,根據接收到的引數進行判斷,從而返回例項化後的物件。
工廠(factory
)角色:接受客戶端的請求,
通過請求負責建立相應的產品物件。
抽象產品(
abstractproduct
)角色:
是工廠模
式所建立物件的父類或是共同擁有的介面。
可是抽象類或介面。
具體產品(
concreteproduct
)物件:工廠模式所建立的物件都是這個角色的例項。
for example:
當我們在買早餐的時候,早餐店裡都賣得寫什麼呢?這點你有注意嗎?眾多食品擺在那裡,你只對營業員說你要何種食品,他便會知道給你拿什麼樣的食品給你,這說明什麼呢?
如果用物件導向的思想來理解的話,營業員在這裡就充當了乙個工廠的角色,他負責根據你的請求返回你需要的食品物件。
而這一點正是簡單工廠模式的意圖。
具體實現演算法如下:
1.首先編寫乙個食物基類(
food
)這是角色中的抽象產品,他表示工廠所要返回的物件的共有特徵。然後根據食物類派生其他類,比如饅頭類
(bread)
,包子類
(dumpling)
,油條類(
stick
)。這是所要返回的例項化類。 2.
編寫工廠角色類
(factory)
。函式public
static
food createinstance(
string
key)
根據引數
key進行邏輯判斷,返回所要例項化的物件。 3.
編寫客戶端程式,呼叫工廠類中的
createinstance
函式。返回乙個
food
的子類。由於可用父類表示子類,所以……
此時的設計就已經完全符合簡單工廠模式的意圖了。顧客
(client)
對早餐店營業員
(factory)
說,我要「饅頭
」,於是營業員便根據顧客所提供的資料(饅頭)
,去眾多食品中找,找到了然後就拿給顧客。
優缺點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅"消費
"產品。簡單工廠模式通過這種做法實現了對責任的分割。
當產品有複雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。
系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於複雜
,違背了"開放
--封閉"原則
(ocp)
.另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。
工廠模式 簡單工廠
簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...
工廠模式 簡單工廠
工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...