設計模式粗淺理解之------簡單工廠模式
什麼是簡單工廠模式
從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(static factory method)模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。
角色和職責
工廠(creator)角色
簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需的產品物件。
抽象產品(product)角色
簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
具體產品(concrete product)角色
是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。
優缺點
優點
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該建立哪個具體類的物件.通過使用工廠類,外界可以從直接建立具體產品物件的尷尬局面擺脫出來,僅僅需要負責「消費」物件就可以了。而不必管這些物件究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟體體系結構的優化。
缺點
由於工廠類集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。
當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同例項的需求.這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利。
使用場景
工廠類負責建立的物件比較少;
客戶只知道傳入工廠類的引數,對於如何建立物件(邏輯)不關心;
**例項
以下例項我希望模擬乙個使用者登入的功能,在很多的系統中都存在多種使用者,可以具有不同的許可權,假設我們在某系統中存在以下使用者超級使用者super(s),管理員admin(a),普通使用者normal(n),這三種使用者在登入時系統要根據不同的的使用者級別各自進行相應的操作。根據以上場景,我們如果用簡單工廠模式可以採用如下方式實現:
第一步 建立所有使用者類別的公共父類
1該類定義了乙個使用者類別的屬性,以及現實使用者類別的虛方法,其子類必須要實現該方法。public
class
user 34
public
string
usertype 57
set 8}
910public
virtual
void
showuser()
1113 }
第二步 建立具體的使用者類
超級使用者類:
1管理員類:class
superuser : user
6public
override
void
showuser()
710 }
1普通使用者類:class
superuser : user
6public
override
void
showuser()
710 }
1第三步 建立乙個工廠類,根據傳入的引數不同建立不同的物件class
superuser : user
6public
override
void
showuser()
710 }
1做完以上工作我們就可以在程式中使用我們的類,程式不關心我們如何建立具體的使用者類,只是明確的將需要例項化的類的引數傳入工廠類,由工廠類負責呼叫相應的建構函式建立具體類,示例如下:public
class
use***ctory
19return
user;20}
21 }
1use***ctory類完全遮蔽了每個使用者類的具體過程,其輸出結果如下:class
program
214 }
java設計模式之一 簡單工廠模式
從設計模型的型別來講,簡單的工廠模式屬於建立型模式,又叫靜態工廠方法模式,簡單的工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式的實質是由工廠類根據傳入的引數,動態決定應該建立哪種產品類 這些產品類繼承自乙個父類或實現乙個介面 的例項。工廠 creator 角色 簡單工廠模式的核心...
工廠模式之一 簡單工廠模式
在物件導向程式設計中,產生乙個物件例項最常用的方法是使用new關鍵字來建立,但這樣耦合度太高,如果建立此物件時,需要一些其他的操作,這些 建立物件和一些其他的操作 如果沒有封裝起來給客戶端使用,客戶端大量使用這些 一旦這些重複的操作需要更改,那麼帶來的工作量將是巨大的,也不利於擴充套件。所以我們建立...
設計模式 工廠模式(簡單工廠模式和方法工廠模式)
一 簡單工廠模式 簡單工廠模式概述 又叫靜態工廠方法模式,它定義乙個具體的工廠類負責建立一些類的例項 優點 客戶端不需要在負責物件的建立,從而明確了各個類的職責 缺點 這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護 動物類 ...