抽象工廠開始之前,我不得不先說一句,關於工廠方法,我以為不太常用來著。而實際上,想到當年在學校,老師在教三層的時候告訴我們,service 與 dao 層必須都要繼承自介面,並提供乙個實現類,只是神秘的一笑告訴我們,這對**有好處,然而一直到了學期結束也不知道有什麼好處。
大概也不知道什麼時間,**越寫越多,也是知道了是什麼好處,service 是為了 aop (**模式的思想),dao 是為了可擴充套件性,如果中途換了資料庫或者框架,我可以重新寫乙個實現 dao 的介面類,來保證之在 spring 中只需要更改實現類路徑,就可以使程式正常執行。
然而,很長一段時間我並沒有反映過來這就是工廠方法,直到今天,我自己想可能是因為 spring 一般會把 dao 作為要生產的元件來看待,而 dao 裡面的操作也確實不怎麼去能人乙個工廠的感覺,所以,工廠方法還是很常用的,常用到我自己都不知道我在用,一般情況下的工廠方法會是這樣
package dao;
public
inte***ce userdao
package dao.jdbc;
import dao.userdao;
public
class
userdaoimpl
implements
userdao
package dao.mybatis;
import dao.userdao;
public
class
userdaoimpl
implements
userdao
其中一些 get 方法看起來也算是「生產」了一些元件吧。不過這樣的話基本上就是拋棄了對產品那方面應該是乙個工廠去對應乙個實體,一般情況下 userdao 中只能獲得 user 實體。
首先,抽象工廠,大概就是可以去處理一組產品吧,乙個抽象工廠中可以去生產多個元件,如果直接在工程方法裡的**改的話應該就是這樣,感覺像吃了什麼奇怪的東西一樣難受。
public
inte***ce foodfactory
如果需要增加某個產品的話肯定需要去改工廠介面。
差不多就是這個樣子,抽象工廠就是工廠方法可以生產多個型別,一般情況下的用法是,抽象工廠中是定義了一組介面,在介面定義好之後,就可以將這個介面拿去使用,或者是將乙個例項化後的物件作為乙個引數去傳入所需要這個方法中,所以,抽象方法應該這樣做。
首先,如果有乙個負責生產一日三餐的工廠。
public
inte***ce eatfactory
(原諒我想不出來別的什麼單詞做類名了)
可以看到的是,吃飯的話自然需要乙個吃飯的地點,這裡就是 mealfactory 了
public
inte***ce mealfactory
從某種程度上來說,抽象工廠已經設計好了,不去關心它的具體實現,直接某個人就要在家裡吃飯了。
human human = new human();
mealfactory mealfactory = new homemealfactory();
human.eat(mealfactory.getstaplefood("饅頭"));
human.eat(mealfactory.getstaplefood("饅頭"));
human.eat(mealfactory.getdish("番茄雞蛋"));
看起來和工廠方法差不多,只是可以獲得不同的資料型別而已,然而這樣,依舊是在呼叫部分來做了一些組合,並不太好,所以,就有了第乙個複製一日三餐的選單工廠類,下面簡單做一下實現
public
class
normaleatfactory
implements
eatfactory
@override
public food getlunch(mealfactory mealfactory)
@override
public food getdinner(mealfactory mealfactory)
}
這樣的話如果想要吃飯,只需要
human human = new human();
eatfactory eatfactory = new normaleatfactory();
human.eat(eatfactory.getdinner(new homemealfactory()));
就可以了,如果說抽象方法的好處,就是可以在實現類沒有做出來之前,使用介面去寫一部分**,或者自己繼承介面去寫測試**,弊端就是,如果介面設計比較糟糕的話,絕對不會累死一批程式設計師的。
最後做下三種工廠的總結
簡單工廠:不實現工廠介面,提供乙個或多個產品型別
工廠方法:實現工廠介面,提供乙個產品型別
抽象工廠:實現工廠介面,提供多個產品型別
the end
設計模式學習筆記 抽象工廠模式
定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...
設計模式筆記 抽象工廠模式
抽象工廠模式向客戶端提供乙個介面,使得客戶端在不必指定具體型別的情況下,建立多個產品族中的物件。本文採取的仍然是接著以前的那個快餐店的例子。現在,快餐店經常良好,逐漸發展壯大,為了適合不同地方人的飲食習慣,建立了兩大系列 相當於產品族 快餐,北方系列和南方系列。每個系列分別由乙個大廚掌勺。抽象工廠模...
設計模式筆記 抽象工廠模式
摘要 介紹了抽象工廠模式的基本概念,並給出了c 語言編寫的程式示例 工廠模式圖 抽象工廠模式向客戶端提供乙個介面,使得客戶端在不必指定具體型別的情況下,建立多個產品族中的物件。本文採取的仍然是接著以前的那個快餐店的例子。現在,快餐店經常良好,逐漸發展壯大,為了適合不同地方人的飲食習慣,建立了兩大系列...