簡單工廠+工廠方法+抽象工廠

學(xué)不可以已!

在這之前也有接觸到過設(shè)計(jì)模式、只是之前的項(xiàng)目沒有講究過多的架構(gòu)、故而一直都沒有去深究設(shè)計(jì)模式。到目前接觸到的語言也有幾種、用的比較多的就是C# and Objective-C 。項(xiàng)目做多了自然就發(fā)現(xiàn)有些東西是可以簡化或者是優(yōu)化、便于應(yīng)用的擴(kuò)展。
先來溫習(xí)一些之前經(jīng)常為提到但是沒有經(jīng)常使用的設(shè)計(jì)模式。

1. 簡單工廠

概念:說的通俗些就是工廠根據(jù)不同的參數(shù)創(chuàng)建對應(yīng)的產(chǎn)品。
例如:有個(gè)簡單工廠是負(fù)責(zé)計(jì)算的 我傳一個(gè)加號就返回一個(gè)算加法的計(jì)算器、我傳一個(gè)減號就返回一個(gè)算減法的計(jì)算器。

SimpleFactory.png

該設(shè)計(jì)模式如果要增加產(chǎn)品,必須修改工廠方法才能實(shí)現(xiàn)。是一個(gè)工廠可以生產(chǎn)多個(gè)產(chǎn)品(一對多)。
如果只從面向?qū)ο蟮慕嵌瓤紤]、簡單工廠其實(shí)就是一個(gè)組合類、只要需要就可以將一個(gè)產(chǎn)品組合到簡單工廠中甚至都可以不用抽象產(chǎn)品。
所以嚴(yán)格的講我到覺得簡單工廠不應(yīng)該用到抽象或者接口的概念、符合簡單一詞。

2. 工廠方法

概念:工廠方法有別于簡單工廠卻是簡單工廠的升級。
不同之處、簡單工廠是通過參數(shù)來控制產(chǎn)品的生產(chǎn)、這里使用的是重載。不同的工廠實(shí)現(xiàn)同一個(gè)工廠方法生產(chǎn)不同的產(chǎn)品。
、是一個(gè)工廠生產(chǎn)一個(gè)產(chǎn)品(一對一)。如需增加產(chǎn)品、首先要增加工廠。是一對一的生產(chǎn)模式。
例如:還是一個(gè)抽象工廠是負(fù)責(zé)計(jì)算的。如果需要生產(chǎn)一個(gè)計(jì)算加法的計(jì)算器、首先就要有一個(gè)只生產(chǎn)加法計(jì)算器的工廠。
如果要生產(chǎn)一個(gè)計(jì)算減法的計(jì)算器、就要有一個(gè)生產(chǎn)減法計(jì)算器的工廠。

FactoryMethod.png

如圖: 工廠A 負(fù)責(zé)生產(chǎn)的是產(chǎn)品A ,工廠B負(fù)責(zé)生產(chǎn)產(chǎn)品B,
從面向?qū)ο蟮慕嵌瓤次覀儼l(fā)現(xiàn)工廠方法就是一個(gè)重載。

3.抽象工廠

概念:說的明白些抽象工廠就是 簡單工廠+工廠方法。

AbstractFactory.png

在簡單工廠中根據(jù)參數(shù)創(chuàng)建對應(yīng)的產(chǎn)品,在抽象工廠中變成了根據(jù)不同的實(shí)例方法來實(shí)現(xiàn)。
在工廠方法中不同的動(dòng)作放在不同的產(chǎn)品中執(zhí)行、在抽象工廠中變成了不同的動(dòng)作在同一個(gè)產(chǎn)品中去實(shí)現(xiàn)。

總結(jié)

從對象關(guān)系的角度看:

  1. 簡單工廠是一對多的關(guān)系 (一個(gè)工廠可以生成多個(gè)產(chǎn)品)
  2. 工廠方法是一對一的關(guān)系(一個(gè)工廠只能生產(chǎn)一個(gè)產(chǎn)品)
  3. 抽象工廠抽象了前面兩個(gè)設(shè)計(jì)模式、(一生產(chǎn)線可以生產(chǎn)多個(gè)產(chǎn)品可以、多個(gè)生產(chǎn)線可以生產(chǎn)一個(gè)產(chǎn)品)
    而這三個(gè)設(shè)計(jì)模式的出發(fā)點(diǎn)是工廠的作用、更多是擴(kuò)展性演變而來。產(chǎn)品的抽象主要是一些列的行為和屬性,工廠的抽象才設(shè)計(jì)的關(guān)鍵。再簡單些概括就是是組合。源代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容