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

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

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

      設(shè)計模式之策略模式學(xué)習(xí)

       

        

       

       

       

        策略模式(Strategy:它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。

                                                                                                           --HeadFirst設(shè)計模式》

       

        一般來說這些算法完成的工作都是一樣的,只是它們的實現(xiàn)不一樣而已,通過策略模式可以定義一個公共的接口去調(diào)用不同的算法類,從而降低了算法類和調(diào)用算法類的耦合度。

       

       

      關(guān)鍵字:策略模式,接口,抽象類,繼承

        

        

       

       

      1        策略模式分析

             策略模式是一種定義一系列算法的方法,定義一個公共的接口,然后使用不同的算法類實現(xiàn)不同的算法。 應(yīng)用場合:只要在分析過程中聽到需要在不同時間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化的可能性。

        優(yōu)點:通過抽象出公共的接口,從而降低算法類和調(diào)用算法類的耦合度(降低耦合度),每個算法都有自己的類,從而方便了每個算法類的單元測試。

        不足:我們在策略類里面都直接實例化了各種算法的類,這大大提高了策略類和算法類的耦合度,而且每當(dāng)我們修改策略類的時候我們都要重新編譯程序(修改方法:反射)。

       

                                   

        

      1使用策略模式UML

        

        

        

       

       

      2    代碼

       

       

      class StrategyA : Strategy
      {
      public override void AlgorithmInterface()
      {
      Console.WriteLine(
      "算法A實現(xiàn)");
      }
      }

       

       

       

       

       

       

      class StrategyB : Strategy
      {
      public override void AlgorithmInterface()
      {
      Console.WriteLine(
      "算法B實現(xiàn)");
      }
      }

       

       

       

       

       

       

       

       

      class StrategyC : Strategy
      {
      public override void AlgorithmInterface()
      {
      Console.WriteLine(
      "算法C實現(xiàn)");
      }
      }

       

       

       

       

      class Context
      {
      private Strategy strategy = null;

      public Context(string type)
      {
      switch(type)
      {
      case "A":
      this.strategy = new StrategyA(); //instance the object
      break;
      case "B":
      this.strategy = new StrategyB();
      break;
      case "C":
      this.strategy = new StrategyC();
      break;
      }
      }

      public void ContextInterface()
      {
      strategy.AlgorithmInterface();
      }

      }

       

       

       

       

      3        優(yōu)化

       

      大家可能已經(jīng)發(fā)現(xiàn)我是通過在策略類(Context)中實例化算法類的,這樣加大了策略類和算法類之間的耦合度,好現(xiàn)在我就使用反射來解決這個問題。

      首先我們要在項目中心機一個App.config文件然后我們只需在里面設(shè)置好要實例化的類的命名空間就好了。

      接下來就像修改策略類(Context)的代碼,這里我們是使用反射實例化算法類,使用泛型的優(yōu)點就是每當(dāng)我們調(diào)用不到的算法只需修改配置文件就OK了,不用重新編譯程序(前提是算法類已經(jīng)存在只是以前沒有調(diào)用它)。

       

       

      修改Context類之后的代碼:

       

      class Context
      {
      private Strategy strategy = null;
      private static readonly string path = ConfigurationManager.AppSettings["Strategy"];
      string className = string.Empty;

      public Context(string type)
      {

      switch(type)
      {
      case "A":
      //this.strategy = new StrategyA(); //instance the object
      className = path + ".StrategyA";
      this.strategy = (StrategyModel.StrategyA)Assembly.Load(path).CreateInstance(className);
      break;
      case "B":
      //this.strategy = new StrategyB();
      className = path + ".StrategyB";
      this.strategy = (StrategyModel.StrategyB)Assembly.Load(path).CreateInstance(className);
      break;
      case "C":
      //this.strategy = new StrategyC();
      className = path + ".StrategyC";
      this.strategy = (StrategyModel.StrategyC)Assembly.Load(path).CreateInstance(className);
      break;
      }
      }

      public void ContextInterface()
      {
      strategy.AlgorithmInterface();
      }

      }

       

       

       

       

       

       

      posted @ 2011-01-10 20:09  JK_Rush  閱讀(1461)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 中文字幕av无码一区二区三区| 国产亚洲精品日韩av在| 欧美人与动牲交精品| 久久亚洲中文字幕伊人久久大 | 午夜好爽好舒服免费视频| 国产成人亚洲一区二区三区| 亚洲色欲或者高潮影院| 免费看成人aa片无码视频吃奶 | 亚洲天堂成人网在线观看| 亚洲精品久荜中文字幕| 国产亚洲精品AA片在线爽| 免费区欧美一级猛片| 青青草原国产精品啪啪视频 | 精品黄色av一区二区三区| 伊人久久久av老熟妇色| 日韩人妻中文字幕精品| 欧美交A欧美精品喷水| 免费无码一区无码东京热| 国产精品国产三级国av| 国产日产亚洲系列av| 色av专区无码影音先锋| 国产精品国产三级国产专i| 色噜噜一区二区三区| 深夜av免费在线观看| 又大又粗又爽的少妇免费视频| 亚洲中文字幕人妻系列| 通许县| 国产精品国三级国产专区| 麻豆国产传媒精品视频| 天堂mv在线mv免费mv香蕉| 女人香蕉久久毛毛片精品| 日韩在线观看中文字幕| 无码一区中文字幕| 亚洲人成色99999在线观看| 97久久精品无码一区二区天美| 日韩国产精品无码一区二区三区| 日韩人妻一区中文字幕| 中文字幕亚洲综合久久2020| 中文字幕一区二区三区久久蜜桃| 日本一区二区三区黄色网| 亚洲午夜理论无码电影|