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

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

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

      簡單工廠模式和策略模式的區(qū)別

           看書上的介紹《大話設(shè)計模式》,這兩很像,都是用一個專門的類來根據(jù)客戶端的條件產(chǎn)生不同的類,實現(xiàn)不同的功能。兩個有什么區(qū)別呢,怎么取舍呢,沒有自己寫過實際的運用,有點暈啊,只能侃侃,耍耍嘴皮子。

            從客戶端來看,簡單工廠需要至少需要兩個類,一個是工廠類Factory,用來產(chǎn)生具體的功能類Function,一個是這個Function類,在這個Function類中定義可以被要被重寫的方法。客戶端使用的時候首先要使用Factory類根據(jù)客戶端條件,產(chǎn)生具體的Function類,然后再使用Function類中的方法實現(xiàn)具體的功能;策略類,在客戶端也要接觸兩個類,一個是想要的具體算法類Category,一個是上下文類Context,Context類的構(gòu)造方法接受一個Category類型對象,然后調(diào)用這個對象的具體算法實現(xiàn)具體的功能,Context類和Factory有點類似,和簡單工廠模式不同的是Context接受一個對象,用這個對象來實例化自己,然后來調(diào)用自己的方法,當然這個方法是用這個對象中的方法。而Factory類接受條件產(chǎn)生一個對象,具體使用這個對象的方法還是要調(diào)用這個對象中的方法,而不是Factory中的方法。就是說Factory只負責獲得對象,Context要依靠一個具體的對象來實例化自己,并調(diào)用具體的功能方法。

           從類的結(jié)構(gòu)來看Factory只要包含一個根據(jù)條件創(chuàng)建對象的方法CreateFunction(),Context類需要定義自己的構(gòu)造函數(shù),和一個實現(xiàn)具體功能的方法。

           簡單工廠中包含了必要的邏輯判斷,根據(jù)客戶端選擇條件動態(tài)實例化相關(guān)的類。策略模式中具體的策略類要在客戶端判斷,然后再上下文類中調(diào)用方法。

           簡單工廠代碼如下:

      代碼
      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;
          }
          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 static void main()
      {
        
      string condition = "asdfasdf";
        Function fc 
      = Factory.CreateObject(condition);
        fc.DoSomething(); 
      }

       

      策略模式代碼如下:

      代碼
      public class Context
      {
        
      private Strategy st;
        
      public Context(Strategy st)
        {
           
      this.st = st;
        }
        
      public void DoStragegyWork()
        {
           st.DoSomeWork();
        }
      }
      abstract class Strategy
      {
        
      public abstract void DoSomeWork();
      }
      public class StrategyA:Strategy
      {
        
      public override void DoSomeWork()
        { A... ... }
      }
      public class StrategyB:Strategy
      {
        
      public override void DoSomeWork()
        { B... ... }
      }
      public static void main(string args[])
      {
        StrategyB sb 
      = new StrategyB();
        Context ct 
      = new Context(sb);
        ct.DoStragegyWork(); 
      }

       

       

      可以讓策略模式和簡單工廠模式結(jié)合起來,讓new Context(sb);這個構(gòu)造方法接受一個條件變量,在方法體中根據(jù)這個變量產(chǎn)生具體的類來實例化。

       具體方法如下:

       

       

      代碼
      public class Context
      {
        
      private Strategy st;
        
      public Context(string condition)
        {
           
      switch("conditionA")
           
      this.st = new StrategyA();
           
      break;
           
      switch("conditionB")
           
      this.st = new StrategyB();
           
      break;
           
      default:
           
      break;
        }
        
      public void DoStragegyWork()
        {
           st.DoSomeWork();
        }
      }
      abstract class Strategy
      {
        
      public abstract void DoSomeWork();
      }
      public class StrategyA:Strategy
      {
        
      public override void DoSomeWork()
        { A... ... }
      }
      public class StrategyB:Strategy
      {
        
      public override void DoSomeWork()
        { B... ... }
      }
      public static void main(string args[])
      {
        StrategyB sb 
      = new StrategyB();
        Context ct 
      = new Context(sb);
        ct.DoStragegyWork(); 
      }

       

           哪位大俠可以舉個在項目中的運用,貼點簡單的代碼看看,先謝謝了。我這些都是從書本里得來的。

      posted @ 2010-01-11 15:23  nd  閱讀(2960)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色综合久久综合中文综合网| 国产69精品久久久久乱码免费| 狠狠久久五月综合色和啪| 2021国产在线视频| 屯留县| 日韩精品福利视频在线观看| 伊人久久大香线蕉综合观| 亚洲熟妇色xxxxx亚洲| 日本精品不卡一二三区| 国产精品成人av电影不卡| 在线 欧美 中文 亚洲 精品| 国产精品亚洲а∨天堂2021| 乱人伦人妻精品一区二区| 人妻系列无码专区免费| 两个人看的www免费视频中文| 国产一区二区不卡在线| 亚洲中文字幕乱码一区| 欧美成人aaa片一区国产精品 | 松潘县| 日韩精品一区二区都可以| 欧美野外伦姧在线观看| 无码中文字幕乱码一区| 国产精品永久久久久久久久久| 亚洲精品中文字幕在线观| 不卡在线一区二区三区视频| 不卡一区二区国产精品| 亚洲aⅴ无码专区在线观看q| 国产永久免费高清在线| 午夜福利在线观看6080| 亚洲日韩国产一区二区三区在线| 亚洲综合一区国产精品| 亚洲精品国产美女久久久| 狠狠躁夜夜躁人人爽天天古典| 91久久天天躁狠狠躁夜夜| 蜜桃草视频免费在线观看| 图们市| 亚洲精品一区二区三区色| 在线涩涩免费观看国产精品| 亚洲日本va午夜蜜芽在线电影| 国产精品麻豆欧美日韩ww| 国产高清在线男人的天堂|