設(shè)計(jì)模式學(xué)習(xí)總結(jié)之一
設(shè)計(jì)模式其實(shí)只是一種程序設(shè)計(jì)的思想準(zhǔn)則。通過(guò)該思想準(zhǔn)則來(lái)指導(dǎo)我們的程序開(kāi)發(fā)行為,盡量讓開(kāi)發(fā)的程序更加穩(wěn)健、高效、思路清晰、少bug......
開(kāi)發(fā)一程序項(xiàng)目,往往并不只限于單一地使用某一模式。往往會(huì)多種模式同時(shí)使用。
其實(shí),設(shè)計(jì)模式在具體項(xiàng)目中的應(yīng)用開(kāi)發(fā)中。要說(shuō)要用xxx/xxx模式來(lái)搭框架開(kāi)發(fā)等等,這些都是不對(duì)的。因?yàn)閭€(gè)人認(rèn)為,設(shè)計(jì)模式的應(yīng)用,是隨著項(xiàng)目的
不同而定的。因?yàn)椴煌捻?xiàng)目有著不同的解決方案。而不同的解決方案,將決定著,需要使用哪xxx/哪xxx模式來(lái)處理會(huì)比較好,此時(shí)才能說(shuō),確定了項(xiàng)目
的框架等等。
比如說(shuō):本來(lái)需要開(kāi)發(fā)一個(gè)本地資源管理的項(xiàng)目。如果你一開(kāi)始就給它定了一定要用單實(shí)例模式來(lái)搭框架實(shí)現(xiàn)。那我們就不明白了這個(gè)實(shí)例,在框架中,
到底它應(yīng)該是什么。反過(guò)來(lái),正常的,我們應(yīng)該根據(jù)這個(gè)項(xiàng)目的需要來(lái)確定應(yīng)該用到的模式。就拿該例子來(lái)說(shuō)。我們可以對(duì)資源方面,使用抽象工棧模式
在資源與展現(xiàn)及其處理方面,我們可以應(yīng)用觀察模式(即:所謂的observer模式)。如此一來(lái),我很明確了,該系統(tǒng)大置的框架。這正應(yīng)了剛開(kāi)始的一句話
:設(shè)計(jì)模式只是一種程序設(shè)計(jì)的思想準(zhǔn)則,它只是用來(lái)指導(dǎo)程序開(kāi)發(fā)的行為。
當(dāng)然想懂得設(shè)計(jì)模式的東東,確實(shí)還是離不開(kāi)面向?qū)ο螅ǖ乃枷耄?duì)oo思想更解的越深刻,學(xué)起設(shè)計(jì)模式的將相對(duì)越輕松,也更解的會(huì)更深刻些(當(dāng)然,
學(xué)習(xí)它將是個(gè)不斷迭代的過(guò)程的)。反過(guò)來(lái),對(duì)設(shè)計(jì)模式理解的越深刻,對(duì)oo的理解及應(yīng)用與設(shè)計(jì),也將大大有益。
一:Factory模式(工廠模式)
所謂的Factory模式,即:它能類似工廠一樣,不斷地產(chǎn)生(即:創(chuàng)建)“產(chǎn)品”出來(lái)。但它所創(chuàng)建出來(lái)的那些“產(chǎn)品”,一般是抽象類的產(chǎn)品。舉例:
假如有抽象類AbstractBasicClass。我們要想使用它,必須得有它的實(shí)現(xiàn)類。按正常來(lái)說(shuō),我們可以直接通過(guò)其具體的子類實(shí)例化一個(gè)產(chǎn)品出來(lái)。但這樣會(huì)
有個(gè)問(wèn)題,當(dāng)AbstractBasicClass擁有N種不同的實(shí)現(xiàn)子類時(shí),那我們到底要使用哪種具體子類來(lái)實(shí)例化,并且,各個(gè)不同的具體實(shí)現(xiàn)子類的命名,也將是
個(gè)可怕的問(wèn)題。因此這樣的維護(hù)將變得十分復(fù)雜。而Factory的設(shè)計(jì)就可以起來(lái)很好的一個(gè)維護(hù)作用。其實(shí)Factory模式的設(shè)計(jì),還有一個(gè)好處,就是使得實(shí)例
化得到了推遲(到了后期----一般指執(zhí)行期)。
二:AbstractFactory模式(抽象工廠模式)
上面Factory模式,其實(shí)針對(duì)的是一類類的情況,即:處理的上上面的AbstractBasicClass這一類類的情況。而實(shí)際項(xiàng)目中,卻往往需要處理N種的這樣抽象類、
的情況。此時(shí),我們將這N種類的產(chǎn)品創(chuàng)建都?xì)w到一個(gè)Factory中時(shí),此時(shí)的Factory即為一個(gè)AbstractFactory了。因此說(shuō),F(xiàn)actory與AbstractFactory只不過(guò)
是處理的類各類的個(gè)數(shù)差異罷了。其思想是類似的。
但一般來(lái)說(shuō)AbstractFactory所產(chǎn)生出來(lái)的種抽象類,其實(shí)它們之間,一般來(lái)說(shuō),或多或少,會(huì)是有一定的關(guān)系的。比如:一個(gè)Abstractfactory產(chǎn)生出兩個(gè)
抽象類的產(chǎn)品A和B。則A可能就需要B的某些功能,反之類似。
小結(jié):Factory與AbstractFactory的設(shè)計(jì),最終的目的都只是為了使用系統(tǒng)抽象類的維護(hù)更加簡(jiǎn)單些。