<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      簡單工廠和工廠方法的區別

           在《簡單工廠模式和策略模式的區別》中說道簡單工廠中用一個Factory類來專門負責產生具體的類,在添加一個功能的時候要做兩個動作,一是添加一個FunctionC類繼承自Function類,二是要修改Factory類的CreateObject方法。

           代碼如下:

      代碼
      public class Factory
      {
        
      public static Function CreateObject(string condition)
        {
          Function ft 
      = null;
          
      switch condition:
          
      case conditionA:
          {
            ft 
      = new FunctionA();
            
      break;
          }
          
      case conditionB:
          {
            ft 
      = new FunctionB();
            
      break;
          }
          
      case conditionC:        //修改了CreateObject方法
          {
            ft 
      = new FunctionC();
            
      break;
          }    
          
      default:
          
      break;
        }
      }
      public calss Function
      {
         
      public virtual void DoSomething()
         {
           .... ....
         }
      }
      public class FunctionA:Function
      {
       
      public void override DoSomething()
       {
         .... ...
       }
      }
      public calss FuctionB:Function
      {
        
      public void override DoSomething()
        {
          .... ....
        }
      }
      //擴展一個新的類
      public calss FuctionC:Function
      {
        
      public void override DoSomething()
        {
          .... ....
        }
      }
      public static void main()
      {
        
      string condition = "asdfasdf";
        Function fc 
      = Factory.CreateObject(condition);
        fc.DoSomething(); 
      }

           這樣看起來也很方便,但是軟件設計里面有個原則開放封閉原則,對于擴展開放,對于修改封閉。這里修改了CreateObject()方法,做項目的時候發現只要修改就會有可能出錯誤,可能就是這個道理吧。這樣就誕生了工廠方法模式。  

           工廠方法模式省去了原來的Factory類,不用這個類來生產對象,但是使用一系列的工廠類來專門負責產生相應的類。在客戶端要想使用這個功能類,首先要獲得它的工廠類,由這個工廠類來產生相應的功能類。這樣添加一個功能的時候也要做兩個工作,一是添加相應的功能類,二是添加一個工廠類。工廠方法模式定義一個用于創建對象的工廠接口IFactory,讓這個接口的子類FactoryA,FactoryB決定實例化具體的功能類,而不是想簡單工廠中那樣直接在工廠類Factory中決定。

           工廠方法代碼如下:

      代碼
      interface IFactory  //定義一個工廠接口
      {
        Function CreateFunction(); 
      //工廠接口的功能:產生功能類
      }
      class FactoryA:IFactory  
      {
        
      public override CreateFunction()
        {
          
      return new FunctionA();
        }
      }
      class FactoryB:IFactory  
      {
        
      public override CreateFunction()
        {
          
      return new FunctionB();
        }
      }
      //去掉原來的工廠類
      public calss Function
      {
         
      public virtual void DoSomething()
         {
           .... ....
         }
      }
      public class FunctionA:Function
      {
       
      public void override DoSomething()
       {
         .... ...
       }
      }
      public calss FuctionB:Function
      {
        
      public void override DoSomething()
        {
          .... ....
        }
      }
      public static void main()
      {
        IFactory ifactory
       = new FactoryA();      //根據要實例化的功能類選擇工廠類
        FunctionA fa = ifactory.CreateFunction();//工廠類實例化具體的功能類
        fa.DoSomething(); 
      }

          簡單工廠類也可以實現這樣的功能,就是要修改原來的Factory類,在工廠方法模式里面要添加一個功能,需要擴展一個FuctionB:Function,還要擴展一個FactoryB:IFactory,避免了修改,開放了擴展。

      posted @ 2010-01-11 22:01  nd  閱讀(708)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 女人与牲口性恔配视频免费| 中文字幕久久国产精品| 东京热一精品无码av| 四平市| 国产在线无码不卡播放| 97在线精品视频免费| 西宁市| 久久夜色精品国产亚av| 三级三级三级A级全黄| 亚洲精品美女一区二区| 亚洲综合色一区二区三区| 亚洲av无码精品蜜桃| 亚洲精品乱码久久久久久蜜桃| 国产亚洲一区二区三区四区 | 在线免费播放av观看| 欧美日产国产精品日产| 40岁成熟女人牲交片20分钟| 无码中文av波多野结衣一区 | 国产精品先锋资源在线看| 欧美三级a做爰在线观看| 久久久久久人妻一区精品| 亚洲精品在线二区三区| 绩溪县| 国产在线啪| 亚洲蜜桃av一区二区三区| 亚洲成人av在线系列| 浴室人妻的情欲hd三级国产| 欧美精品亚洲精品日韩专| 欧美日韩在线亚洲二区综二| 成人亚洲av免费在线| 精品一区二区中文字幕| 亚洲狠狠婷婷综合久久久| 国内精品国产三级国产a久久| 人与禽交av在线播放| 亚洲综合网中文字幕在线| 天堂中文最新版在线官网在线| 无码视频一区二区三区| 国产情侣激情在线对白| 额济纳旗| 国产自在自线午夜精品| 国产在线观看网址不卡一区|