之前看了 劉小壯 的【工廠模式三部曲】:簡(jiǎn)單工廠模式、工廠模式重贺、抽象工廠模式骑祟。受益匪淺回懦,強(qiáng)烈推薦去看一下這三篇原文!
下文是個(gè)人學(xué)習(xí)后的簡(jiǎn)記次企,用于之后的快速回顧怯晕。
1、簡(jiǎn)單工廠模式
抽象產(chǎn)品類:聲明公共特性及屬性缸棵;
具體產(chǎn)品子類:繼承自抽象產(chǎn)品類舟茶,去實(shí)現(xiàn)具體的操作;
工廠類:根據(jù)外界需求堵第,在工廠類中創(chuàng)建對(duì)應(yīng)的產(chǎn)品子類實(shí)例對(duì)象吧凉,并回傳給外界,是否創(chuàng)建由外界決定踏志。
代碼演示如下阀捅,略去部分代碼:
優(yōu)點(diǎn):簡(jiǎn)單。
缺點(diǎn):
1针余、創(chuàng)建產(chǎn)品子類的代碼幾乎相同饲鄙,只是創(chuàng)建的具體對(duì)象不同,若產(chǎn)品子類過多圆雁,會(huì)有很多條件語(yǔ)句忍级。
2、每次增刪某個(gè)算法摸柄,都需操作工廠類颤练,即,對(duì)擴(kuò)展開放驱负,對(duì)修改也開放,不符合 開放-封閉原則 患雇。
優(yōu)化:
利用
runtime
的反射機(jī)制進(jìn)行改造跃脊。符合面向?qū)ο缶幊痰?開放-封閉原則。
( 開放-封閉原則:對(duì)現(xiàn)有代碼進(jìn)行擴(kuò)展時(shí)苛吱,不對(duì)原有代碼進(jìn)行修改的原則酪术。)
2、工廠方法模式
抽象產(chǎn)品類:聲明公共特性及屬性翠储;
具體產(chǎn)品子類:繼承自抽象產(chǎn)品類绘雁,去實(shí)現(xiàn)具體的操作;
抽象工廠類:定義創(chuàng)建產(chǎn)品子類的接口援所,通過接口返回產(chǎn)品子類的對(duì)象庐舟。與應(yīng)用程序無關(guān),任何在模式中創(chuàng)建產(chǎn)品子類對(duì)象的工廠住拭,都必須實(shí)現(xiàn)此接口挪略。
具體工廠子類:繼承自抽象工廠類历帚,并重寫父類的方法來創(chuàng)建對(duì)應(yīng)的產(chǎn)品子類。
代碼演示如下杠娱,略去部分代碼:
優(yōu)點(diǎn):更加靈活挽牢,增刪某種運(yùn)算,都不會(huì)對(duì)其他地方造成影響摊求,更加符合 開放-封閉原則禽拔。
缺點(diǎn):新增一個(gè)抽象子類,意味著工廠子類要跟著成對(duì)增加室叉,造成生成過多的類睹栖,模式的復(fù)雜度也隨之增加。
3太惠、抽象工廠模式
定義了每個(gè)系列的產(chǎn)品子類創(chuàng)建所需的方法磨淌,而無需指定它們具體的類型。也叫 Kit模式凿渊。
抽象產(chǎn)品類:聲明公共特性及屬性梁只;
具體產(chǎn)品子類:繼承自抽象產(chǎn)品類,去實(shí)現(xiàn)具體的操作埃脏;
抽象工廠類:定義創(chuàng)建產(chǎn)品子類的接口搪锣,根據(jù)系列中不同類型的產(chǎn)品子類可能會(huì)有多種行為。
具體工廠子類:繼承自抽象工廠類彩掐,根據(jù)當(dāng)前具體產(chǎn)品子類對(duì)應(yīng)的系列构舟,重寫父類的方法來創(chuàng)建對(duì)應(yīng)的產(chǎn)品子類。
抽象工廠模式和工廠方法模式很相似堵幽,但是前者將抽象發(fā)揮到極致狗超,是三種工廠模式中最抽象的一種設(shè)計(jì)模式。
工廠方法模式是針對(duì)單個(gè)類型的抽象類朴下,而抽象工廠模式是針對(duì)具有相同結(jié)構(gòu)的一系列類型的抽象類努咐。
代碼演示如下,略去部分代碼:
優(yōu)點(diǎn):
1殴胧、強(qiáng)大靈活渗稍。
2、工廠子類對(duì)應(yīng)的是多個(gè)系列的產(chǎn)品子類团滥,可以統(tǒng)一控制多個(gè)系列的產(chǎn)品子類竿屹,更好的利用了工廠子類,適合更加復(fù)雜的業(yè)務(wù)需求灸姊。
3拱燃、完美符合 開放-封閉原則。
缺點(diǎn):
1厨钻、模式比較龐大扼雏,所以需要在合適的業(yè)務(wù)場(chǎng)景使用坚嗜,不然會(huì)適得其反。
4诗充、總結(jié)
1苍蔬、 三種工廠模式的共同點(diǎn):繼承自抽象類(抽象產(chǎn)品類/抽象工廠類)的子類(產(chǎn)品子類/工廠子類),都必須對(duì)抽象類定義的方法給出對(duì)應(yīng)的實(shí)現(xiàn)蝴蜓,此模式就叫做 工廠模式碟绑。
2、工廠模式的核心:抽象+多態(tài)茎匠。
抽象子類繼承自抽象類格仲,對(duì)抽象類中定義的方法和屬性給出不同的實(shí)現(xiàn)方式,通過多態(tài)的方式進(jìn)行方法實(shí)現(xiàn)和調(diào)用诵冒,構(gòu)成了工廠模式的核心凯肋。
3、在工廠類中對(duì)開放封閉原則有著完美的體現(xiàn)汽馋,對(duì)擴(kuò)展的開放以及對(duì)修改的封閉侮东。
例如,最抽象的抽象工廠模式豹芯,
a悄雅、抽象工廠模式中增加新的系列(蘋果系列),直接擴(kuò)展一個(gè)工廠子類 (蘋果工廠子類)及對(duì)應(yīng)的產(chǎn)品子類(蘋果Phone產(chǎn)品子類铁蹈、蘋果TV產(chǎn)品子類)宽闲,對(duì)整個(gè)模式框架不會(huì)帶來其他影響。
b握牧、如果增加一個(gè)新的類型(如電腦)容诬,創(chuàng)建新的類型對(duì)應(yīng)的類(電腦的抽象產(chǎn)品類,各系列的電腦產(chǎn)品子類)沿腰,并對(duì)整個(gè)抽象工廠類(添加生產(chǎn)電腦)及其工廠子類(各系列對(duì)應(yīng)實(shí)現(xiàn)的生產(chǎn)電腦)進(jìn)行方法擴(kuò)展放案。
4、在外界使用產(chǎn)品子類的功能時(shí)矫俺,不需要知道任何關(guān)于產(chǎn)品子類的特征,產(chǎn)品子類也不會(huì)出現(xiàn)在外界掸冤,外界只需要和抽象類打交道就可以厘托。
工廠模式將產(chǎn)品子類的創(chuàng)建和實(shí)現(xiàn)分離,具體的創(chuàng)建操作由工廠類來進(jìn)行稿湿,產(chǎn)品子類只需要關(guān)注業(yè)務(wù)即可铅匹,外界不需要知道產(chǎn)品子類實(shí)例化的過程。這種方式非常靈活并易于擴(kuò)展饺藤,而且在大型項(xiàng)目中尤為明顯包斑,可以很好的避免代碼量過多的問題流礁。