數(shù)據(jù)加載中……
          設(shè)計模式之三種工廠的比較

          在設(shè)計模式中的創(chuàng)建者模式中有三中模式可以說是同根同源。它們就是簡單工廠模式、工廠模式、抽象工廠模式。下面我們逐一看它們的特點以及異同。

          1、簡單工廠模式

          簡單工廠模式并不在GoF的23種設(shè)計模式之列,不過它卻是工廠模式和抽象工廠模式最簡化的一種表現(xiàn)形式。它通過一個工廠類Factory來根據(jù)傳入的參數(shù)決定構(gòu)建具體哪一類產(chǎn)品的實例。它屏蔽了客戶端創(chuàng)建具體產(chǎn)品實例的過程,提供給客戶端可用的對象。但是它有一個致命的缺點就是Factory中的邏輯比較負(fù)責(zé),要根據(jù)參數(shù)去判斷生成怎么樣的產(chǎn)品實例給客戶端。特別是產(chǎn)品實例動態(tài)的增加的時候,你必須要修改Factory的判斷邏輯,這一點違背了“開-閉原則”。可能這也是它未能入選23種設(shè)計模式的原因吧。

          上uml圖吧,這樣更易于理解(圖來源于百度百科)

           

          2、工廠模式

          如果說什么模式應(yīng)用最多,個人認(rèn)為就是工廠模式了。例如想Spring中Factory,Bean實在是太常見了。你自己平時寫程序,new一個對象也是非常常見的,所以工廠模式常見也是非常正常。如果要說工廠模式和抽象工廠模式的區(qū)別,那就要先看抽象工廠的缺點了,違背了“開-閉”原則。所以工廠模式,就作出了改進,每一個Product都有一個自己對應(yīng)的工廠。當(dāng)然這些工廠都繼承于抽象工廠類,并實現(xiàn)了工廠方法。

          上uml圖吧,自己可以對比一下,圖片來源于大話設(shè)計模式

           

          3、抽象工廠模式

          看了上面的工廠模式,你是不是會覺得很爽,因為大部分new出來的對象都可以用工廠去產(chǎn)生,確實,在Spring中,所有的類成員變量都是配置文件配進去的,也就是通過工廠產(chǎn)生的。但是你會發(fā)現(xiàn)一個問題,如果是一個工廠只產(chǎn)生一個bean,那么如果我想產(chǎn)生一組bean怎么辦呢?因為很多時候某一組bean是捆綁在一起的。例如db中,sqlServer,mysql,oracle各自對應(yīng)一組Connection, resultSet等,那是你這個時候就需要抽象工廠了,它提供了這樣對一組or一類bean區(qū)分的需求的支持。

          上uml圖吧,偶覺得有圖有真相,呵呵。圖片仍舊來自大話設(shè)計模式。

           

          4、總結(jié)

          通過上面的介紹和圖例,基本可以看出三種工廠模式的特點和異同。主要是它們的不同點,簡單工廠封裝了構(gòu)建對象的過程,但內(nèi)部存在判斷邏輯,所以違背了“開-閉”原則。工廠模式通過對每一個product增加一個工廠去增加彌補這個缺點。但是工廠模式又不能生成同一類型的多個product,所以抽象工廠模式通過增加多個工廠方法去解決這個問題。
          最后附上文檔的pdf吧。呵呵,希望對設(shè)計模式初學(xué)者有用。
          /Files/zhenxuanpan/設(shè)計模式之三種工廠.pdf

          posted on 2011-08-21 21:28 潘潘.eagle 閱讀(515) 評論(0)  編輯  收藏 所屬分類: Design Pattern


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 临清市| 长白| 衡阳市| 泰安市| 大邑县| 巢湖市| 冀州市| 泽库县| 新泰市| 长寿区| 南通市| 南江县| 泾源县| 邹平县| 钟祥市| 武冈市| 林州市| 成安县| 襄垣县| 塔河县| 金坛市| 普兰店市| 绵竹市| 宜章县| 醴陵市| 防城港市| 荆州市| 九寨沟县| 德州市| 牡丹江市| 银川市| 芒康县| 东山县| 汾西县| 织金县| 霸州市| 松桃| 河南省| 哈密市| 彰武县| 自治县|