久違的設(shè)計(jì)模式系列視頻单芜。之前寫(xiě)過(guò)三篇設(shè)計(jì)模式捺弦。感興趣的可以看看茄唐。
好了,我們開(kāi)始正式開(kāi)始介紹工廠方法模式舀锨,簡(jiǎn)單工廠方法模式(靜態(tài)工廠方法模式)岭洲,抽象工廠方法模式。
部分摘選《Android 源碼設(shè)計(jì)模式 解析與實(shí)戰(zhàn)》
導(dǎo)航
1.什么是工廠方法模式坎匿,簡(jiǎn)單工廠方法模式(靜態(tài)工廠方法模式)盾剩,抽象工廠方法模式。
2.工廠方法模式替蔬,簡(jiǎn)單工廠方法模式告私,抽象工廠方法模式的區(qū)別
首先!上例子承桥!
小M 是一家汽車(chē)廠的廠長(zhǎng)驻粟,對(duì)他來(lái)說(shuō),組裝汽車(chē)沒(méi)什么好神秘的凶异,無(wú)非就是將一些零件組裝起來(lái)蜀撑,小M的車(chē)廠就是負(fù)責(zé)某款SUV車(chē)型,比如Q3,Q5,Q7 小M的車(chē)廠有三條產(chǎn)品線剩彬。
將車(chē)抽象出來(lái)酷麦,將車(chē)的公共屬性定義在抽象車(chē)類(lèi)里
每個(gè)車(chē)分別實(shí)現(xiàn)這個(gè)接口
一種車(chē)一個(gè)工廠,將工廠的方法抽象出來(lái)
每種車(chē)的工廠實(shí)現(xiàn)抽象工廠
最后組裝成了流水線
這就是工廠方法模式襟衰,主要分4大塊贴铜,一是抽象工廠,二是具體工廠瀑晒,三是抽象產(chǎn)品绍坝,四是具體產(chǎn)品
工廠方法對(duì)應(yīng)每一種產(chǎn)品,都有一種工廠苔悦,通過(guò)反射的方式可以簡(jiǎn)化成一個(gè)抽象工廠一個(gè)工廠方法
總結(jié)一下轩褐,以上就是工廠方法模式,定義一個(gè)用創(chuàng)建對(duì)象的接口玖详,讓子類(lèi)決定實(shí)例化哪個(gè)類(lèi)把介。工廠方法模式是創(chuàng)建型設(shè)計(jì)模式之一勤讽,是一種簡(jiǎn)單的模式,開(kāi)發(fā)中應(yīng)用廣泛拗踢。
在不復(fù)雜的類(lèi)中可以將抽象工廠類(lèi)和具體工廠類(lèi)簡(jiǎn)化成一個(gè)有靜態(tài)方法的工廠類(lèi)脚牍。在上面的例子中,可以有兩張方式實(shí)現(xiàn)巢墅,一是通過(guò)switch case 方式實(shí)現(xiàn)诸狭,二是通過(guò)反射的方式實(shí)現(xiàn),
有多個(gè)工廠類(lèi)的模式是工廠方法模式君纫,只有一個(gè)工廠類(lèi)的模式是簡(jiǎn)單工廠模式(也叫靜態(tài)工廠方法模式)
以上就是工廠方法模式及靜態(tài)工廠方法模式驯遇。
抽象工廠我們繼續(xù)上一個(gè)例子
小M 車(chē)廠增加一個(gè)新生產(chǎn)線,生產(chǎn)Q9蓄髓,那么這種情況依然屬于工廠方法模式叉庐,因?yàn)榇藭r(shí)只需要加一個(gè)產(chǎn)品實(shí)現(xiàn)類(lèi)即可。滿足開(kāi)閉原則会喝。
當(dāng)小M車(chē)廠想生產(chǎn)倒車(chē)儀陡叠,需要增加一個(gè)抽象產(chǎn)品。和實(shí)現(xiàn)產(chǎn)品肢执,及新的抽象工廠和產(chǎn)品工廠匾竿,由于每個(gè)車(chē)現(xiàn)在都需要倒車(chē)儀,所以還需要將車(chē)與倒車(chē)儀進(jìn)行組裝蔚万。
兩個(gè)產(chǎn)品用工廠方法模式的,uml如下临庇;
小M發(fā)現(xiàn)可以將兩個(gè)產(chǎn)品在一個(gè)工廠生產(chǎn)反璃。經(jīng)改變
如果另一個(gè)產(chǎn)品不是倒車(chē)儀而是一個(gè)與車(chē)無(wú)關(guān)的東西,那么就不能用抽象工廠方法模式了假夺。
抽象工廠方法模式:創(chuàng)建一組或者是相互依賴的對(duì)象提供一個(gè)接口淮蜈,而不需要制定它們具體的類(lèi)。
抽象工廠角色: 這是工廠方法模式的核心已卷,它與應(yīng)用程序無(wú)關(guān)梧田。是具體工廠角色必須實(shí)現(xiàn)的接口或者必須繼承的父類(lèi)。在java中它由抽象類(lèi)或者接口來(lái)實(shí)現(xiàn)侧蘸。
具體工廠角色:它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼裁眯。由應(yīng)用程序調(diào)用以創(chuàng)建對(duì)應(yīng)的具體產(chǎn)品的對(duì)象。在java中它由具體的類(lèi)來(lái)實(shí)現(xiàn)讳癌。
抽象產(chǎn)品角色:它是具體產(chǎn)品繼承的父類(lèi)或者是實(shí)現(xiàn)的接口穿稳。在java中一般有抽象類(lèi)或者接口來(lái)實(shí)現(xiàn)。
具體產(chǎn)品角色:具體工廠角色所創(chuàng)建的對(duì)象就是此角色的實(shí)例晌坤。在java中由具體的類(lèi)來(lái)實(shí)現(xiàn)
我在學(xué)習(xí)的時(shí)候是將工廠方法模式與抽象方法模式放在一起對(duì)比看的逢艘,更易于理解旦袋,本篇的工廠方法模式是從抽象工廠方法模式中截取的,相信大家能看出來(lái)它改。
最后總結(jié)一下這兩種模式:
結(jié)語(yǔ):以上是我對(duì)工廠方法模式的理解疤孕,如果有不對(duì)的地方,歡迎只出來(lái)央拖,一起進(jìn)步祭阀,(Ps沒(méi)用好。想做的圖沒(méi)做出來(lái)爬泥。有機(jī)會(huì)我吧圖更新下)
關(guān)注????公眾號(hào) 柬讨,獲取更多Android資訊