說在前面的話
在上一篇文中介紹工廠模式時其實已經(jīng)提到過抽象工廠模式导饲。在此先回顧一下:
簡單工廠模式就沒什么好說的了叫惊,無非是所有的東西都寫在一個類里面脯倚,要什么就調(diào)用什么恬试,如果要添加新的方法也是到這類里面添加审丘,代碼很多聪黎,看起來也是很亂,就像一個大工廠备恤,什么都在里面稿饰。擴展性很低。
而工廠方法模式露泊,把說明的理論和生產(chǎn)的東西就分開一點喉镰。抽象工廠模式是工廠方法模式的升級。說簡單點惭笑,后面兩種工廠模式都是java三大特征的繼承和多態(tài)的具體表現(xiàn)侣姆,你從后面的類圖中就可以很簡單看到繼承(接口為實現(xiàn))的關(guān)系生真,而你在代碼中就很容易看到多態(tài)的使用。?
抽象工廠模式
簡介:?為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個接口捺宗,而且無需指定它們的具體類柱蟀。用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品(對于增加新的產(chǎn)品,無能為力蚜厉〕ひ眩可增加一系列的產(chǎn)品族)。?抽象工廠模式用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品昼牛,對于只增加產(chǎn)品某一部分則不適用术瓮。抽象工廠的接口類是能創(chuàng)建多個相關(guān)的對象,而工廠方法的接口類是只創(chuàng)建一個對象贰健。抽象工廠模式是工廠模式的一種升級版本胞四。
特點:
1 系統(tǒng)獨立于它的產(chǎn)品創(chuàng)建、組合和表示伶椿。即無需關(guān)心內(nèi)部對象時如何創(chuàng)建的辜伟,怎么創(chuàng)建的,什么含義脊另。
2 系統(tǒng)需要多個產(chǎn)品組合中的一個配置导狡。由于對象很多,能夠組合出的組合非常多尝蠕,而系統(tǒng)只是使用某一個組合。3 強調(diào)的對象的組合結(jié)果载庭,而不是他們具體的接口和實現(xiàn)看彼。
實例:
例如:生產(chǎn)汽車,抽象工廠模式可以生產(chǎn)高端汽車全部配件來組成一個高端汽車囚聚,低端汽車全部配件來組成要給低端的汽車靖榕,但是不能產(chǎn)生一個高端的發(fā)動機和一個低端的座椅來組成一個中等的汽車。這樣會混亂顽铸。
代碼實現(xiàn)
A茁计、首先使用一個接口來定義一個發(fā)動機,使用具體的類來定義發(fā)動機的好壞(具體實現(xiàn))
B谓松、定義一個汽車總工廠星压,用來生產(chǎn)各種類型的汽車。所有的汽車都需要依賴此工廠來生產(chǎn)汽車鬼譬。
C娜膘、然后根據(jù)生產(chǎn)的不同產(chǎn)品,來創(chuàng)建具體的實現(xiàn)來生產(chǎn)汽車优质。例如:專門生產(chǎn)高端的汽車竣贪,專門生產(chǎn)低端的汽車军洼。都可以用針對CarFactory具體的實現(xiàn)來創(chuàng)建。
D演怎、具體生產(chǎn)汽車的時候就可以根據(jù)需要來創(chuàng)建具體的汽車了匕争。
以上就是一個針對產(chǎn)品族的工廠,用來生產(chǎn)一個產(chǎn)品爷耀,而不是一個配件甘桑。假如以后想生產(chǎn)一個中端汽車產(chǎn)品。就可以增加相應(yīng)的類畏纲,實現(xiàn)汽車總工廠CarFactory來生產(chǎn)扇住。
工廠模式要點
簡單工廠模式(靜態(tài)工廠模式):
雖然某種程度不符合面向?qū)ο笠?guī)則(不符合開閉原則,每次新增內(nèi)容都需要在原有代碼上修改)盗胀,但是實際使用最多艘蹋。
工廠方法模式?:
不修改已有類的前提下,通過增加新類來實現(xiàn)擴展票灰。
抽象工廠模式?:
不可以增加產(chǎn)品中某一個配件女阀,可以增加一個具體的產(chǎn)品族。
原文連接:工廠模式