先是大概看了下,介紹工廠模式的篇幅有些略長啊,有些不太愿意看了。
在書中先是介紹了“簡單工廠”,就是利用一個方法生成實例對象,在別的語言中通常用靜態(tài)實現(xiàn),在OC中往往是利用+標(biāo)識的類方法實現(xiàn),簡單的理解就是避免用new生成實例的方法。直接用類方法進行生成新當(dāng)前類實例的方法被書中介紹成“簡單工廠方法”。
根據(jù)書中的定義:
通過讓子類決定該創(chuàng)建的對象是什么,來達到將對象創(chuàng)建的過程封裝的目的--------工廠方法模式
如果按照該定義作為正確評判工廠方法模式的正確準(zhǔn)則的話,我們用+標(biāo)識的方法,僅僅是類方法,并非是某一種設(shè)計模式,并且書中介紹簡單工廠模式僅僅是大家約定俗成的一種書寫習(xí)慣,談不上是什么模式。
但是核心思想都是我們調(diào)用直接調(diào)用一個方法去生成實例,相比我們直接使用new 進行實例化有什么好處呢?
好處就是 我們可以更改這個方法的具體實現(xiàn),并且不會更改原有調(diào)用方的代碼邏輯,這也體現(xiàn)了封閉的原則,我們可以在該方法中實例化出對應(yīng)的子類,也就是調(diào)用方從來不關(guān)心具體是哪個實例,只要我能調(diào)用出對應(yīng)的方法就好。利用多態(tài),做到更改函數(shù)的具體實現(xiàn),而這樣做的一切,都不會影響調(diào)用方--------即調(diào)用方可以不更改任何代碼,僅僅更改工廠函數(shù)(瞎起的名,懂這個意思就好)具體生成子類的策略,就能實現(xiàn)處理不同場景的功能,這樣的一切更改對于調(diào)用方 都是無感知的。
OO的封裝、繼承、多態(tài)思想還需要加強,多態(tài)的影子中在設(shè)計模式中太常見了。
值得注意的是,在我當(dāng)初學(xué)這個模式的時候有些想不通的是,直接在我們直接在調(diào)用類的等號左邊直接用父類,等號右邊直接實例化子類不也是達到了同樣的效果么?調(diào)用方的代碼就也就改了一處,后來發(fā)現(xiàn)這種想法是略傻逼的。在代碼實現(xiàn)上判斷耦合程度最簡單的方式就是看#import引入的類是否多,如果引入過多的類則證明改類會和很多類都有聯(lián)系,即和很多類存在耦合,如果按照剛才方式,做了一件事不僅引入了父類也引入了子類,相比別人做一件事只引入一個類是不是辦的優(yōu)點傻逼呢?
所以具體的實例化過程還是都放在工廠方法中實現(xiàn)比較穩(wěn)妥,這樣調(diào)用方僅僅引入父類即可,而且一行代碼都不用更改!
盡量以后設(shè)計的時候,盡量多考慮依賴接口,而不是依賴實現(xiàn)編程,這是為了以后即使需要變動,盡量保證變動較少的原則。這些目前看都是簡單工廠所做的,工廠模式 目前還沒真理解,只是有點模糊的理解,屬于半吊子階段中。
一個正式的工廠方法模式的介紹:
定義一個創(chuàng)建對象的接口,但由子類決定要實例化的類是哪一個,工廠方法讓類吧實例化推遲到子類。
就是用方法封裝了實例化的過程,調(diào)用方都會當(dāng)作父類去使用,而實際實例了哪個類都是由工廠函數(shù)決定了。