1. 程式人生 > >【設計模式】簡單工廠模式 |工廠方法模式 |抽象工廠模式

【設計模式】簡單工廠模式 |工廠方法模式 |抽象工廠模式

簡單工廠模式

由三種角色組成:
1、工廠類角色:是簡單工廠模式的核心,含有一定的商業邏輯和判斷邏輯。
2、抽象產品角色:一般是具體產品繼承的父類或者實現的介面。
3、具體產品角色:工廠類所建立的物件就是此角色的例項。

用一個單獨的類來做這個創在例項的過程,這就是工廠,下面是以簡單運算為例的一個簡單工廠的結構圖。
這裡寫圖片描述

優點:工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。
缺點:無法靈活的擴充套件和維護

如果我想讓計算器的功能再增加,這是就要改變好幾個地方,一但有一個地方沒有改,就無法實現新增加的功能,這時就要改變一下策略了。使用工廠方法模式

工廠方法模式

定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。

組成:
1、抽象工廠角色:是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。
2、具體工廠角色:它含有和具體業務邏輯有關的程式碼。由應用程式呼叫以建立對應的具體產品的物件。
3、抽象產品角色:它是具體產品繼承的父類或者是實現的介面。
4、具體產品角色:具體工廠角色所建立的物件就是此角色的例項。

這裡寫圖片描述

抽象工廠模式

提供一個建立一系列相關或者相互依賴物件的介面,而無需指定它們的具體類。它也是三個模式中最為抽象,最具有一般性的模式。

與工廠方法模式的組成類似:
1、抽象工廠角色:是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。
2、具體工廠角色:它含有和具體業務邏輯有關的程式碼。由應用程式呼叫以建立對應的具體產品的物件。
3、抽象產品角色:它是具體產品繼承的父類或者是實現的介面。
4、具體產品角色:具體工廠角色所建立的物件就是此角色的例項。

這裡寫圖片描述
優點:易於交換產品系列,讓具體的建立例項過程與客戶端分離
缺點:當要新增專案的時候要改動的地方就會有很多。


下面進入:用反射+抽象工廠的資料訪問程式
是否還記的在簡單工廠模式中所用到的switch或者if,這個時候就可以考慮一下反射技術來去除switch或者if,以解除分支帶來的耦合。
例項化IUser的常規寫法為:

IUser result=new SqlserverUser();

那麼如果是反射的寫法呢?

using System.Reflection;  //引用空間名

IUser result=(IUser)Assembly.Load("抽象工廠模式").CreateInstance("抽象工廠模式.SqlserverUser");

反射的寫法則是將程式由編譯時轉為執行時。這是就看要例項化的類名是什麼,然後將SqlserverUser進行更改就可以啦。
如果想讓程式碼變得更加的完美,還可以採用反射+配置檔案實現資料訪問程式的方式,這樣可以使得程式碼更加的清晰,出問題的時候改動的就更加的方便,快捷啦。