定義:
抽象工廠模式是一種建立型模式,意圖是「提供乙個建立一系列相關或相互依賴物件的介面,而不需要指定它們具體的類」。(《design patterns》gof)
邏輯:專案需求:
現在我們要設計乙個人事管理系統(pesy),因為該專案需要向很多的單位提供,我們在資料庫方面考慮使用sql server來設計。現在來看看其中資料方面的一些實現。
public class sqlemployee
///
/// 刪除乙個員工
///
public bool delete(string employeeid) }
///
/// 客戶呼叫
///
public class pesy }
我們知道,不同的資料庫的sql語句會有一些不同,有的資料庫可以使用儲存過程,檢視等等,而有的資料庫不支援。
下面我們的需求改變了,乙個省級人事機構要使用我們的專案,資料量和更新相當的大,這樣我們得考慮到使用大型的關係型資料庫,這裡我們使用oracle來改變需求。
public class oracleemployee
///
/// 刪除乙個員工
///
public bool delete(string employeeid) }
///
/// 客戶呼叫
///
public class pesy }
很好,看上去我們已經滿足了客戶的需求。但是如果我們需要更多的資料庫型別,就的編寫不同資料庫操作層,最讓我們無法接受的是,我們每次必須去重寫 客戶端的呼叫方法,我們不得不每次都委派技術人員到給客戶進行除錯,客戶無法自己進行相關配置,這已經違背的我們學習設計模式的初衷。
那麼讓我們在仔細分析一下我們的系統。
當每次客戶需求改變時,我們就需要考慮資料庫是否能夠承受客戶的需求。目前需求衝突的部分是我們每次都必須修改客戶呼叫部分。我們每次都要為客戶進行部署。但是我們發現,在資料庫操作層裡,他們都用相同的方法名,相同的公共屬性,那麼我們可能想到可以提取這些介面。
public inte***ce iemployee
然後其餘的資料庫操作類實現這個介面,這樣我們就同一類面向介面程式設計的模型。在來看看我們的客戶端現在應該怎麼寫。
///
/// 客戶呼叫
///
public class pesy }
我們提取了公共的介面,但是發現好像並沒有像我們想想中的一樣解決什麼問題。因為我們一旦改變的資料庫,我們仍然需要改變客戶端呼叫,進行部署。現在我們可以考慮為專案增加乙個factory工廠類。
public class factory }
再來看看客戶端的呼叫
///
/// 客戶呼叫
///
public class pesy }
這裡每次我們只需要在配置檔案裡指定需要載入的dll就ok了,現在如果客戶需求改變,我們只需要把相應資料庫操作類提供給客戶,然後更改一下配置就完成了專案,這是不是很奇妙?
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...
工廠模式 抽象工廠模式
子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...