工廠模式

沒有工廠模式:

坐飛機(jī):

去機(jī)場,自己找某個航空公司買機(jī)票,還要去自己去某個地方選座位,還要自己去某個地方托運(yùn)行李。

有了工廠模式:去前臺辦理處,告訴前臺,我要乘坐海航的航班,選個靠窗的位置,行李在這里,都交給你了。

簡單工廠模式:

1、工廠類角色:有一定的判斷邏輯,用于判斷創(chuàng)建哪個產(chǎn)品實(shí)例
2、抽象產(chǎn)品角色:一般是具體產(chǎn)品繼承的父類或?qū)崿F(xiàn)的接口
3、具體產(chǎn)品角色:工廠類創(chuàng)建的對象就是此類的實(shí)例,每個產(chǎn)品對應(yīng)一個具體java類

例子2:機(jī)場窗口
一開始的機(jī)場很小,只有一個窗口,這個窗口賣海航、南航的機(jī)票,同時也管行李托運(yùn),每個航空公司行李托運(yùn)限額不一樣。
前臺(1.工廠類)只是 判斷 乘客想做哪家航空,負(fù)責(zé)通知航空公司,這里有乘客要坐你們的航班,不同的航空(3.不同的具體產(chǎn)品類)負(fù)責(zé)具體的服務(wù),不同的航空公司也都是航空公司(2.抽象產(chǎn)品類)
后來又加了一個西部航空,因?yàn)槭橇畠r航空,行李限額又不一樣,此時,隨著航空公司的增多,窗口的前臺任務(wù)會越來越重,就體現(xiàn)了簡單工廠模式的缺點(diǎn)
1、工廠類任務(wù)太重
2、違背了開閉原則(需要在負(fù)責(zé)原有業(yè)務(wù)的前臺,強(qiáng)加許多其他業(yè)務(wù))
于是出現(xiàn)了工廠方法模式

工廠方法模式:

1、抽象產(chǎn)品角色:一般是具體產(chǎn)品繼承的父類或接口(航空公司類)
2、具體產(chǎn)品角色:具體的產(chǎn)品類(海航類、南航類)
3、抽象工廠角色:一般是具體工廠繼承的父類或接口(前臺類)
4、具體工廠角色:負(fù)責(zé)管理具體產(chǎn)品的創(chuàng)建(海航前臺類、南航前臺類)

航空公司的增多,任務(wù)的復(fù)雜,讓前臺們應(yīng)付不來,于是增加了許多窗口,1號窗口的海航前臺(4.具體工廠)負(fù)責(zé)海航,2號窗口的南航前臺(4.具體工廠)負(fù)責(zé)南航,3號窗口西航前臺(4.具體工廠)負(fù)責(zé)西部航空,但是他們都是前臺,都繼承了前臺類(3.抽象工廠類)
其他還是和簡單工廠模式一樣,海航前臺負(fù)責(zé)通知海南航空,某位顧客要乘坐他們的航班,海航類(2.具體產(chǎn)品類)負(fù)責(zé)具體服務(wù)。海航也繼承了航空公司類(1.抽象產(chǎn)品類)

缺點(diǎn):當(dāng)產(chǎn)品種類(航空公司)非常多時,前臺窗口會成倍增加(對應(yīng)的具體工廠類成倍增加)。

抽象工廠模式:

隨著人們生活品質(zhì)的提升,航空飛機(jī)開始對座位,行李限重進(jìn)行分類。座位有頭等艙,經(jīng)濟(jì)艙。行李有10KG、20KG

在工廠方法的基礎(chǔ)上就出現(xiàn)了多個1.抽象產(chǎn)品類(座位類、行李類等),
頭等艙、經(jīng)濟(jì)艙(2.具體產(chǎn)品類
10KG行李、20KG行李(2.具體產(chǎn)品類

區(qū)別1:工廠方法模式只有一個抽象產(chǎn)品類,而抽象工廠模式有多個抽象產(chǎn)品類

前臺類(3.抽象工廠類)負(fù)責(zé)詢問用戶是選擇什么座位,放多少行李。

海航前臺(4.具體工廠類)負(fù)責(zé)詢問用戶坐什么座位,放多少行李。
工廠方法模式:海航前臺,只負(fù)責(zé)讓你乘坐海航航班
抽象工廠模式:
1、可以選坐頭等艙,放10KG行李。
2、可以選坐頭等艙,放20KG行李。
3、可以選坐經(jīng)濟(jì)艙,放10KG行李。等等

區(qū)別2:
工廠方法模式:一個具體工廠類(海航前臺)只能創(chuàng)建一個具體產(chǎn)品類的實(shí)例,海航前臺只能選擇海航航班
抽象工廠模式:一個具體產(chǎn)品類(海航前臺)可以創(chuàng)建多個具體產(chǎn)品類的實(shí)例,海航前臺可以創(chuàng)建
1、坐頭等艙,放10KG行李的航班
2、坐頭等艙,放20KG行李的航班
多個具體實(shí)例。

工廠方法模式和抽象工廠模式的區(qū)別:
1、工廠方法模式只有一個抽象產(chǎn)品類,抽象工廠模式有多個抽象產(chǎn)品類
2、工廠方法模式一個具體工廠類只能創(chuàng)建一個具體實(shí)例,抽象工廠模式一個具體工廠類能創(chuàng)建多個具體實(shí)例

參考
http://blog.csdn.net/jason0539/article/details/23020989
http://blog.csdn.net/jason0539/article/details/44976775

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容