一俩檬、工廠方法
????工廠方法模式他提供了一個抽象類(接口)萎胰,子類實現(xiàn)該接口的某個方法,來創(chuàng)建自己的工廠棚辽,因此是子類來決定要“創(chuàng)建哪個工廠”技竟。
二、抽象工廠
? ??抽象工廠提供一個接口屈藐,通過實現(xiàn)該接口榔组,創(chuàng)建一系列產(chǎn)品家族熙尉,每個工廠負(fù)責(zé)創(chuàng)建指定的產(chǎn)品(這更像是單一單一職責(zé)原則)。
三搓扯、兩種方法的異同
? ??工廠方法和抽象工廠的異同骡尽,如果從方法層面看這兩種模式,會感覺這兩種方法實現(xiàn)的效果十分的類似擅编,不是嗎?再客戶端方法中箫踩,調(diào)用了這兩者的方法爱态,實現(xiàn)了動態(tài)性,區(qū)別在于境钟。抽象方法在調(diào)用階段還沒有確定獲取的是哪一個“實體”锦担,必須根據(jù)傳入?yún)?shù)來判斷,而抽象工廠在實例化工廠的時候已經(jīng)指定了慨削。因此工廠方法更加適用于一對多洞渔,而抽象工廠適用于多對一(如果一對一就完全沒必要了,直接實現(xiàn)就行了)缚态。
四磁椒、思考與分析
? ??依賴倒置的思路:改變我們原有的從頂端開始思考問題的思路,而是根據(jù)最后我們到底要得到什么來思考問題玫芦,因為有時候像樹那樣的一級一級的去思考問題浆熔,你會發(fā)現(xiàn)代碼的復(fù)雜度會指數(shù)倍爆炸,這里可以拿工廠模式來舉例子桥帆,假如A工廠生產(chǎn)B造機床医增,B機床又可以看出一種工廠(負(fù)責(zé)生產(chǎn)C榨汁機器),C榨汁機又可以做多種飲料D老虫。這里如果從A開始叶骨,把所有的實現(xiàn)放在A實現(xiàn)類中,那么情況會是o(n^3)祈匙,忽刽,這顯然不是我們需要的),那么菊卷,我們可以進(jìn)行解耦缔恳,拿B來說,A和C不需要直接關(guān)聯(lián)洁闰,只有通過B才需要負(fù)責(zé)C的職責(zé)(A說:C不在我的負(fù)責(zé)之內(nèi)歉甚,我只管給你什么參數(shù),你會返回我什么)扑眉,顯然這又滿足了迪米特原則纸泄。好吧赖钞,回到原來的問題,A生產(chǎn)B聘裁,那么我們對B進(jìn)行了抽象雪营,A中只需要存在一個B的抽象,再通過抽象工廠方法創(chuàng)建出B的實例衡便。到了這里A的工作就完成了献起,不需要去關(guān)心C的創(chuàng)建,一個模塊任務(wù)完成镣陕。那么C創(chuàng)的創(chuàng)建就交給B了谴餐,也是同理〈粢郑可以發(fā)現(xiàn)通過上面這種方式岂嗓,將A的o(n^3)感覺業(yè)務(wù)邏輯變的平行了(實際沒有改變最后飲料的創(chuàng)建數(shù)量)。這就是設(shè)計模式的神奇之處鹊碍。