1. 程式人生 > >抽象工廠模式——研磨設計模式——跟著cc學設計系列

抽象工廠模式——研磨設計模式——跟著cc學設計系列

AbstractFactory: 抽象工廠,定義建立一系列產品物件的操作介面。 ConcreteFactory: 具體的工廠,實現抽象工廠定義的方法,具體實現一系列產品物件的建立。 AbstractProduct: 定義一類產品物件的介面。 ConcreteProduct: 具體的產品實現物件,通常在具體工廠裡面,會選擇具體的產品實現物件,來建立符合抽象工廠定義的方法返回的產品型別的物件。 Client: 客戶端,主要使用抽象工廠來獲取一系列所需要的產品物件,然後面向這些產品物件的介面程式設計,以實現需要的功能。 體會抽象工廠模式 選擇組裝電腦的配件 舉個生活中常見的例子——組裝電腦,我們在組裝電腦的時候,通常需要選擇一系列的配件,比如:CPU、硬碟、記憶體、主機板、電源、機箱等等。為了使討論簡單點,只考慮選擇CPU和主機板的問題。 對於裝機工程師而言,他只知道組裝一臺電腦,需要相應的配件,但是具體使用什麼樣的配件,還得由客戶說了算。也就是說裝機工程師只是負責組裝,而客戶負責選擇裝配所需要的具體的配件。 問題 現在需要使用程式來把這個裝機的過程,尤其是選擇組裝電腦配件的過程實現出來,該如何實現呢? 不用模式的解決方案 存在的問題 雖然上面的實現,通過簡單工廠解決解決了:對於裝機工程師,只知CPU和主機板的介面,而不知道具體實現的問題。但還有一個問題沒有解決,什麼問題呢?那就是這些CPU物件和主機板物件其實是有關係的,是需要相互匹配的。 n使用模式的解決方案 先來看看如何使用抽象工廠模式來解決前面提出的問題。 裝機工程師要組裝電腦物件,需要一系列的產品物件,比如CPU、主機板等,於是建立一個抽象工廠給裝機工程師使用,在這個抽象工廠裡面定義抽象的建立CPU和主機板的方法,這個抽象工廠就相當於一個抽象的裝機方案,在這個裝機方案裡面,各個配件是能夠相互匹配的。 每個裝機的客戶,會提出他們自己的具體裝機方案,或者是選擇已有的裝機方案,相當於為抽象工廠提供了具體的子類,在這些具體的裝機方案類裡面,會建立具體的CPU和主機板實現物件。 使用模式的解決方案的結構圖
理解抽象工廠模式 認識抽象工廠模式 1:模式的功能 抽象工廠的功能是為一系列相關物件或相互依賴的物件建立一個介面。 從某種意義上看,抽象工廠其實是一個產品系列,或者是產品簇。 2:實現成介面 AbstractFactory在Java中通常實現成為介面,大家不要被名稱誤導了,以為是實現成為抽象類 3:使用工廠方法 AbstractFactory定義了建立產品所需要的介面,具體的實現是在實現類裡面,通常在實現類裡面就需要選擇多種更具體的實現,所以AbstractFactory定義的建立產品的方法可以看成是工廠方法,而這些工廠方法的具體實現就延遲到了具體的工廠裡面。也就是說使用工廠方法來實現抽象工廠。 4:切換產品簇 抽象工廠定義了一個產品簇,因此切換產品簇的時候提供不同的抽象工廠就好了 5:抽象工廠模式的呼叫順序示意圖
  定義可擴充套件的工廠 在前面的示例中,抽象工廠為每一種它能建立的產品物件都定義了相應的方法,比如建立CPU的方法和建立主機板的方法等。 這種實現有一個麻煩,就是如果在產品簇中要新增加一種產品,比如現在要求抽象工廠除了能夠建立CPU和主機板外,還要能夠建立記憶體物件,那麼就需要在抽象工廠裡面新增建立記憶體的這麼一個方法。當抽象工廠一發生變化,所有的具體工廠實現都要發生變化,這非常的不靈活。 現在有一種相對靈活,但是不太安全的改進方式來解決這個問題,思路如下: 抽象工廠裡面不需要定義那麼多方法,定義一個方法就可以了,給這個方法設定一 個引數,通過這個引數來判斷具體建立什麼產品物件 ;由於只有一個方法,在返回型別上就不能是具體的某個產品型別了,只能是所有的產品物件都繼承或者實現的這麼一個型別,比如讓所有的產品都實現某個介面,或者乾脆使用Object型別。 抽象工廠和DAO 一:DAO知識回顧 1:DAO:資料訪問物件,是Data Access Object首字母的簡寫 2:DAO是JEE(也稱JavaEE,原J2EE)中的一個標準模式,通過它來解決訪問資料物件所面臨的一系列問題,比如:資料來源不同、儲存型別不同、訪問方式不同、供應商不同、版本不同等等,這些不同會造成訪問資料的實現上差別很大。 3:使用DAO的系統結構圖
4:DAO需要抽象和封裝所有對資料的訪問,DAO承擔和資料倉庫互動的職責,這也意味著,訪問資料所面臨的所有問題,都需要DAO在內部來自行解決 DAO和抽象工廠的關係 在實現DAO模式的時候,最常見的實現策略就是使用工廠的策略,而且多是通過抽象工廠模式來實現,當然在使用抽象工廠模式來實現的時候,可以結合工廠方法模式。因此DAO模式和抽象工廠模式有很大的聯絡。 DAO模式採用工廠方法模式來實現的策略   DAO模式採用抽象工廠模式來實現的策略