<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    數據加載中……
    設計模式之三種工廠的比較

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

    1、簡單工廠模式

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

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

     

    2、工廠模式

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

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

     

    3、抽象工廠模式

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

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

     

    4、總結

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

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

    主站蜘蛛池模板: 亚洲av无码专区在线电影天堂| 国产99精品一区二区三区免费| 日本一道高清不卡免费| 日韩精品视频在线观看免费| 青青草原亚洲视频| 国产人成免费视频网站| 亚洲一卡一卡二新区无人区| 久久久久无码专区亚洲av| 91香蕉国产线观看免费全集| 亚洲AV成人精品一区二区三区| 亚洲人精品午夜射精日韩| 一二三四影视在线看片免费 | 久久亚洲色一区二区三区| 免费A级毛片无码视频| 久久亚洲色WWW成人欧美| 亚洲国产综合91精品麻豆| 日韩在线a视频免费播放| 国产高清不卡免费视频| 日韩亚洲人成网站| 亚洲最大中文字幕| 久久亚洲av无码精品浪潮| 特级做A爰片毛片免费69| 成人性生交大片免费看中文| 亚洲精华国产精华精华液| 亚洲AV本道一区二区三区四区| 日本黄页网站免费| 2021在线永久免费视频| 一级毛片高清免费播放| 中文有码亚洲制服av片| 亚洲综合自拍成人| 亚洲亚洲人成综合网络| 免费播放特黄特色毛片| 性做久久久久久久免费看| 日韩插啊免费视频在线观看| 曰韩无码AV片免费播放不卡| 亚洲日韩国产AV无码无码精品| 亚洲自偷自偷精品| 亚洲va无码va在线va天堂| 在线观看亚洲精品福利片| 成人免费无码精品国产电影| 青青青国产在线观看免费|