• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    .NET設計模式:抽象工廠模式(Abstract Factory)[

    發布: 2008-5-19 13:13 | 作者: Terrylee | 來源: cnblogs | 查看: 197次 | 進入軟件測試論壇討論

    領測軟件測試網 把工廠作為單件,一個應用中一般每個產品系列只需一個具體工廠的實例,因此,工廠通常最好實現為一個單件模式。

        創建產品,抽象工廠僅聲明一個創建產品的接口,真正創建產品是由具體產品類創建的,最通常的一個辦法是為每一個產品定義一個工廠方法,一個具體的工廠將為每個產品重定義該工廠方法以指定產品,雖然這樣的實現很簡單,但它確要求每個產品系列都要有一個新的具體工廠子類,即使這些產品系列的差別很小。

        優點

        分離了具體的類。抽象工廠模式幫助你控制一個應用創建的對象的類,因為一個工廠封裝創建產品對象的責任和過程。它將客戶和類的實現分離,客戶通過他們的抽象接口操縱實例,產品的類名也在具體工廠的實現中被分離,它們不出現在客戶代碼中。

        它使得易于交換產品系列。一個具體工廠類在一個應用中僅出現一次——即在它初始化的時候。這使得改變一個應用的具體工廠變得很容易。它只需改變具體的工廠即可使用不同的產品配置,這是因為一個抽象工廠創建了一個完整的產品系列,所以整個產品系列會立刻改變。

        它有利于產品的一致性。當一個系列的產品對象被設計成一起工作時,一個應用一次只能使用同一個系列中的對象,這一點很重要,而抽象工廠很容易實現這一點。

        缺點

        難以支持新種類的產品。難以擴展抽象工廠以生產新種類的產品。這是因為抽象工廠幾口確定了可以被創建的產品集合,支持新種類的產品就需要擴展該工廠接口,這將涉及抽象工廠類及其所有子類的改變。

        適用性

        在以下情況下應當考慮使用抽象工廠模式:

        一個系統不應當依賴于產品類實例如何被創建、組合和表達的細節,這對于所有形態的工廠模式都是重要的。

        這個系統有多于一個的產品族,而系統只消費其中某一產品族。

        同屬于同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。

        系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴于實現。

        應用場景

        支持多種觀感標準的用戶界面工具箱(Kit)。

        游戲開發中的多風格系列場景,比如道路,房屋,管道等。

        ……

        總結

        總之,抽象工廠模式提供了一個創建一系列相關或相互依賴對象的接口,運用抽象工廠模式的關鍵點在于應對“多系列對象創建”的需求變化。一句話,學會了抽象工廠模式,你將理解OOP的精華:面向接口編程。

     

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>