補(bǔ)上一個(gè)例子https://dev.tencent.com/u/gebibanxiaoming/p/DesignPatterns/git
作為一個(gè)瞎寫(xiě)的樓主今天說(shuō)一說(shuō)我對(duì)標(biāo)題這哥仨的理解。
單獨(dú)說(shuō)一個(gè)的很多了,但是總是越看越混,最后懵逼,這里我希望說(shuō)一下我對(duì)他們的一些理解,不具體說(shuō)代碼。
簡(jiǎn)單工廠:簡(jiǎn)單的說(shuō)寫(xiě)了一個(gè)創(chuàng)建方法創(chuàng)建了一類東西,具體創(chuàng)建的是哪個(gè),這個(gè)方法上會(huì)有一個(gè)參數(shù),根據(jù)這個(gè)參數(shù)再判斷具體生成那個(gè)。
那我們最熟悉的頁(yè)面說(shuō)吧,你有一個(gè)tableView,但是他們的頭試圖不一樣,有三種頭試圖對(duì)應(yīng)三種情況。這里我們就可以使用簡(jiǎn)單工廠了。
簡(jiǎn)單工廠:
第一步:首先抽離一下三種頭試圖共有的東西,比如都是通過(guò)一個(gè)方法來(lái)設(shè)置數(shù)據(jù)的。這樣就生成了一個(gè)協(xié)議,當(dāng)然你寫(xiě)成一個(gè)類也可以。
第二步:實(shí)現(xiàn)(繼承)上面的協(xié)議(類),具體寫(xiě)一下三個(gè)頭試圖的具體類。
第三步:寫(xiě)一個(gè)方法,方法返回值是基礎(chǔ)的協(xié)議(父類),來(lái)一參數(shù)用來(lái)在方法中判斷創(chuàng)建三種頭試圖的哪一種就可以了。ps:一般這個(gè)參數(shù)寫(xiě)成一個(gè)枚舉類型。
還是用上面頭試圖的例子。這次換成工廠方法來(lái)實(shí)現(xiàn)
工廠方法:
第一步:同上。
第二步:同上。
ps:上面兩步總結(jié)一下是對(duì)工廠產(chǎn)品的實(shí)現(xiàn),下面是對(duì)工廠的操作。剛剛簡(jiǎn)單工廠的那個(gè)方法里有一個(gè)判斷,這里就是把這個(gè)判斷去掉,
第三步:創(chuàng)建一個(gè)工廠的基本協(xié)議(類),來(lái)一個(gè)方法返回值是基礎(chǔ)的協(xié)議(父類),但是這里沒(méi)有那個(gè)參數(shù)了。
第四步:實(shí)現(xiàn)(繼承)工廠的協(xié)議(類),具體把每一種頭試圖對(duì)應(yīng)一個(gè)工廠實(shí)例。每一種頭試圖的創(chuàng)建由對(duì)應(yīng)的工廠來(lái)實(shí)現(xiàn)。
對(duì)比一下啊。工廠方法相當(dāng)于把簡(jiǎn)單工廠的創(chuàng)建方法拆分成到三個(gè)子類去寫(xiě)了。當(dāng)然具體的好處不是表面寫(xiě)的這樣簡(jiǎn)單。
要說(shuō)抽象工廠我得把例子改一下,還是那個(gè)tableView,現(xiàn)在對(duì)應(yīng)三種情況時(shí),他們的頭試圖和尾試圖要一起變化。就是從頭試圖的改變,變成了一組頭尾試圖的改變。
步驟這里我就不寫(xiě)了,簡(jiǎn)單的說(shuō)就是把一種工廠產(chǎn)品變成了兩種工廠產(chǎn)品。流程上和工廠方法是一樣一樣的。
文章最后還是那句話,我一種想用自己的理解來(lái)簡(jiǎn)便的說(shuō)清楚一些事情,所以有些地方可能說(shuō)的就不對(duì),希望大神指出