乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式

       skywood 2007-08-06

           抽象工廠是一種創(chuàng)建型模式,是為了解決實例化時所帶來的問題。
           我們先來看看是什么問題,有的時候我們會遇到這種情況,我們需要一系列的對象。舉個例子,有一系列BMW汽車零部件的對象:輪子bmwwheel,油箱bmwoilbox,在一個管理函數(shù)中調(diào)用它們,代碼如下
      class BMWWheel
      {
       public BMWWheel(){};

      class BMWOilbox
      {
       public BMWOilbox(){};
      }
      public void Manage()
      {
       BMWOilbox oilbox = new BMWOilbox();
       BMWWheel wheel = new BMWWheel();
      }
          如果現(xiàn)在需求變了,我們要用大眾一汽BORA的零件,不用BMW的,那么我們除了要再加上相應(yīng)的零件對象外還要將Manage函數(shù)中的對象更改為BORA的零件對象。
           那這時發(fā)現(xiàn)new會帶來了一些問題:實現(xiàn)依賴,不能應(yīng)對具體實例化類型的變化。
           如何解決這類問題呢?封裝變化點。(沒有變化的就不需要封裝)
           工廠模式的緣起:
                1、變化點在“對象創(chuàng)建”,因此就封裝“對象創(chuàng)建”
                2、面向接口編程
           簡單工廠問題:
            1、不能應(yīng)對“不同系列對象”的變化。如:我們要在上面的代碼中加上其他的對象就不能很好的應(yīng)對了
            2、使用面向?qū)ο髧鴥?nèi)的技術(shù)來封裝變化點
           動機:在軟件系統(tǒng)中,經(jīng)常面臨著“一系列相互依賴的對象”的創(chuàng)建工作;同時,由于需求的變化,往往存在更多系列對象的創(chuàng)建工作。面對這種問題,我們想繞過常規(guī)的對象創(chuàng)建方法,提供一種“封裝機制”來避免客戶程序和這種“多系列具體對象創(chuàng)建工作”的緊耦合。
           對于“緊耦合”,我原來是不喜歡這個詞的,但是今天明白了,不是程序緊耦合不好,而是面對頻繁變化的需求,緊耦合會使程序的編寫變得很吃力。如果面對一個不變的需求,松耦合和緊耦合在代碼編寫上應(yīng)該是沒什么區(qū)別的。
           《設(shè)計模式》中解釋這種模式的意圖是:提供一個接口,讓該接口負責(zé)創(chuàng)建一系列“相關(guān)或者相互依賴的對象”,無需指定他們的具體類。
           下面我們來看看如何使用抽象工廠模式完成對這種變化的封裝:
           首先我們的需求是BMW的車輪和油箱,當然他們要繼承各自的基類,代碼如下

       abstract class AbstractWheel
       {
        public AbstractWheel()
        {
         //Console.Write("Create a AbstractProduct");
        }
       }

       abstract class AbstractOilBox
       {
        public AbstractOilBox()
        {}
       }

       class BMWWheel:AbstractWheel
       {
        public BMWWheel()
        {
         Console.Write("Create a BMWwheel");
        }
       }

       class BMWOilBox:AbstractOilBox
       {
        public BMWOilBox()
        {
         Console.Write("Create a BMWOilBox");
        }
       }
       
           然后,我們在建立一個生產(chǎn)這些零件的工廠,它繼承自一個抽象工廠

       //抽象工廠
       abstract class AbstractFactory
       {
        abstract public AbstractWheel CreatWheel();
        abstract public AbstractOilBox CreatOilBox();
       }

       class BMWFactory:AbstractFactory
       {
        public override AbstractWheel CreatWheel()
        {
         return new BMWWheel();
        }

        public override AbstractOilBox CreatOilBox()
        {
           return new BMWOilBox();
        }

       }

           現(xiàn)在我們在Main函數(shù)中調(diào)用它們:
       static void Main(string[] args)
        {
         AbstractFactory factory = null;
         factory = new BMWFactory();
         factory.CreatWheel();
         Console.Write("\n");
         factory.CreatOilBox();
         Console.Write("\n");
         Console.Read();
        }
           顯示結(jié)果:
                Create a BMWwheel
                Create a BMWOilBox

           現(xiàn)在我們想不用BMW的零件,用BORA的零件了,先寫一些BORA零件的類:
       class BORAWheel:AbstractWheel
       {
        public BORAWheel()
        {
         Console.Write("Create a BORAWheel");
        }
       }

       class BORAOilBox:AbstractOilBox
       {
        public BORAOilBox()
        {
         Console.Write("Create a BORAOilBox");
        }
       }
           然后我們再創(chuàng)建BORA零件的工廠:
       class BORAFactory:AbstractFactory
       {
        public override AbstractWheel CreatWheel()
        {
         return new BORAWheel();
        }

        public override AbstractOilBox CreatOilBox()
        {
         return new BORAOilBox();
        }

       }
           再來看看如何在Main函數(shù)中修改使其調(diào)用BORA的零件;我們只要在將Main中的factory對象實例化為BORA的工廠BORAFactory就可以了:
       static void Main(string[] args)
        {
         AbstractFactory factory = null;
         factory = new BORAFactory();
         factory.CreatWheel();
         Console.Write("\n");
         factory.CreatOilBox();
         Console.Write("\n");
         Console.Read();
        }
       
           結(jié)果如下:
                Create a BORAWheel
                Create a BORAOilBox


       
           Abstract Factory模式的幾個要點:
                1、如果沒有應(yīng)對“多系列對象構(gòu)建”的需求變化,則沒有必要使用Abstract Factory模式。
                2、“系列對象”指的是這項對象之間有相互依賴、或作用的關(guān)系。
                3、Abstract Factory模式主要在于應(yīng)對“新系列”的需求變動。缺點是難以應(yīng)對“新對象”的需求變動。這一點應(yīng)該注意,就像前面說的,如果我們現(xiàn)在要在加入其他系列的類,代碼的改動會很大。
                4、Abstract Factory模式經(jīng)常和Factory Method模式共同組合來應(yīng)對“對象創(chuàng)建”的需求變化。

      posted on 2006-04-22 22:37 KiddLee 閱讀(1367) 評論(8)  編輯 收藏 引用 網(wǎng)摘 所屬分類: 設(shè)計模式

      FeedBack:
      # 
      工廠模式一搜一堆
      而且為什么不用UML來表示呢?
      代碼看起來太亂  回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2006-04-23 18:01 共享精神
      樓上的話是不是太絕對了?
      baidu上確實是一搜一片~
      但是,不知道,不懂的還有很多,每年都有新的程序員在成長,難不成他們不看都懂?
      別的不想多說,共享的精神才是程序員應(yīng)有的.
      幫樓主頂了  回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2006-04-23 21:18 kid_li
      哈哈,謝了,的確設(shè)計模式很早就有了,我也是學(xué)習(xí)了一些共享的資料后,把我的理解寫上去,如果大家愿意看看,和我討論一下,共同進步一下。我以后也考慮一下使用UML表示。還望多多指點  回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2006-04-28 12:39 bisou.cn
      怎么不繼續(xù)寫了呢!關(guān)注中  回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2006-04-28 13:15 kid_li
      @bisou.cn
      哈哈,謝謝大家的關(guān)注,這幾天就寫  回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2006-06-22 17:04 Oscar
      3、Abstract Factory模式主要在于應(yīng)對“新系列”的需求變動。缺點是難以應(yīng)對“新對象”的需求變動。這一點應(yīng)該注意,就像前面說的,如果我們現(xiàn)在要在加入其他系列的類,代碼的改動會很大。
      -------------------------------------
      其實是這樣的,“新對象”變化指的是AbstractWheel的接口增加,那么代碼修改量就會很大,而不是增加其他系列的類。
        回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2006-07-11 11:35 大雁
      這篇文章寫得不錯,通俗易懂,我看了篇關(guān)于抽象工廠模式的文章,都不是很理解,看了這篇,思維一下子明朗。如果作者能在文中附加UML圖,效果會更好。  回復(fù)  更多評論
        
      # re: 設(shè)計模式學(xué)習(xí)筆記(三)——Abstract Factory抽象工廠模式  2007-03-20 15:07 反洗錢系統(tǒng)
      樓上的真會說話啊~~!!
      謝謝樓主的文章!  回復(fù)  更多評論
        

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多