學習設計模式-工廠模式,解決了簡單工廠模式的缺點。
定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。
我們還那萬達商場做例子,簡單工廠模式中,我們把店家當作是我們的選擇之一,我們在換一種角度思考。
萬達商場中一開始店家沒有入駐的時候,時空的,但是它預留了很多店家的位置,需要別人進行入駐操作。
這個狀態,我們可以理解成工廠模式的一種實現。這
裡萬達提供的店家門面,相當於我們程式中的乙個個介面資訊,只不過這些介面是沒有實現的。
具體要實現那些,我們要看那些店家入駐。
///
/// 萬達抽象類
///
public
abstract
class
wanda
///
/// 購買食物
///
public
class
buyfood
:wanda
}///
/// 購買衣服
///
public
class
buyclothes
:wanda
}///
/// 抽象工廠類 -工廠模式實現的重要類
///
public
abstract
class
creator
///
/// 購買食物-工廠類
///
public
class
buyfoodfactory
:creator
}///
/// 購買衣服-工廠類
///
public
class
buyclothesfactory
:creator
}///
/// 客戶進入萬達商場了
///
static
void
main
(string
args)
使用工廠方法實現的系統,如果系統需要新增新產品時,我們可以利用多型性來完成系統的擴充套件,對於抽象工廠類和具體工廠中的**都不需要做任何改動。
例如:增加乙個購買家具的店家,實現購買
而不用像簡單工廠模式中那樣去修改工廠類中的實現(具體指新增case語句)。具體**為:
///
/// 購買家具
///
public
class
buyfurniture
:wanda
}///
/// 購買家具工廠類,負責實現售賣家具的效果
///
public
class
buyfurniturefactory
:creator
}///
/// 客戶進入萬達商場了
///
static
void
main
(string
args)
優點:
工廠方法模式是為了克服簡單工廠模式的缺點(主要是為了滿足ocp)而設計出來的。
簡單工廠模式的工廠類隨著產品類的增加需要增加很多方法(或**),而工廠方法模式每個具體工廠類只完成單一任務,**簡潔。
工廠方法模式完全滿足ocp,即它有非常良好的擴充套件性
1、乙個呼叫者想建立乙個物件,只要知道其名稱就可以了。
2、擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以。
3、遮蔽產品的具體實現,呼叫者只關心產品的介面。
缺點:每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,
使得系統中類的個數成倍增加,
在一定程度上增加了系統的複雜度,
同時也增加了系統具體類的依賴。
應用場景:
1、日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。
2、資料庫訪問,當使用者不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。
等。。。
常用於資料庫調整,畢竟資料庫種類會比較多每家公司選擇的又都不一樣,所以需要了解一下
工廠模式算是我們專案中常用的一種模式了,主要的應用場景也是資料庫訪問的地方,可以達到一種動態切換資料庫訪問的效果。實際應用頻率還是比較高的,就算不切換,也會預留,方便後期擴充套件(手動機智)
文章參考:
c#設計模式(3)——工廠方法模式
工廠模式
C 簡述何為單例模式
設計模式一直是,我們經常說到的 但是用到的可能並不多,有時候用到後不知道這是個啥模式 手動笑哭 所以寫部落格記錄一下 方便以後 溫故而知新 單例模式指的是確保某乙個類只有乙個例項,並提供乙個全域性訪問點。這個是最終比較完善的類的宣告方法 方法由來可以參考單例模式詳解 單例模式的實現 public s...
簡述設計模式(二) 工廠方法和抽象工廠模式
簡單工廠模式是由乙個工廠物件決定建立哪一種產品類的例項。使用工廠類封裝了建立產品類例項物件的行為,使用者只需告訴工廠類獲取哪個例項,工廠類建立並返回使用者所需的例項。產品介面 public inte ce fruit 產品1 public class implements fruit 產品2 pub...
工廠模式 (C )
1 uml設計圖 2 核心實現 public static insurancefactorygetinsurancefactory string type else if type.equals 汽車損壞 else if type.equals 財產安全 else if type.equals 人員...