[用設計模式鍛鍊C#系列]之Strategy

名稱:Strategy
中文名:策略
類型:行爲型
簡介:一般用於多策略解決方式的實現.
      本人以爲,它的設計思路和Bridge
      很象像.然Stratege的焦點是多策略的實現,
      而Bridge目的於系統的低耦合性,
      當然strategy的特性它亦可實現.
      因爲它們都是基本依賴於OOP中的多態特性.
      它在很多體現多策略的情況下是繼承最好的
      替代者.    

// created on 2003-3-14 at 7:27

using System;
//member: strategy  concretestrategy context
interface strategy{
 string multi_purpose(string _str);
}

class concretestrategy1:strategy{
 public string multi_purpose(string _str)
 {
  return (_str+" concretestrategy1");
 }
}

class concretestrategy2:strategy{
 public string multi_purpose(string _str)
 {
  return (_str+"concretestrategy2");
 }
}

class context{
 private strategy _strategy;
 
 public context(strategy m_STR){
       _strategy = m_STR;
 }
 
 public string Test(string  m_STRcontext)
    {
        return _strategy.multi_purpose(m_STRcontext);
    }


}


class designpattern_test{
 public static void Main(){
  int m_Inum;
  context m_CON = null;
  Console.WriteLine("Which method you will choose :/n"+
                                  "1.quick but not pricition./n"+
                                  "2.pricition but not quick./n"+ 
                                  "1 or 2?/n");
  for(;;){
  string m_STR = Console.ReadLine();
  if(m_STR == "1" || m_STR == "2")
  {
     m_Inum = Int32.Parse(m_STR);
   break;
  }
  else
  {
     Console.WriteLine("Which method you will choose :/n"+
                                     "1.quick but not pricition./n"+
                                     "2.pricition but not quick./n"+ 
                                     "1 or 2?/n");
  }
  }
  
  if(m_Inum == 1)
   m_CON =new context(new concretestrategy1());
  else
      m_CON =new context(new concretestrategy2());
  
  if(m_CON != null)
  {
   Console.WriteLine(m_CON.Test("I am"));
  }
  else
  {
      Console.WriteLine("May be there is a memory exception./n");
  }
  
  
 }
}


點評:
    1.首先還是C#的接口的原生支持interface.
      我們需要知道繼承類對它的簽名方法的實現
      必須是public.關於本人對它的看法詳見bridge篇.
    2.順便提及:C#不在支持初始化列表和默認參數的行爲.
    3.其它關於很多實現機制原理同於Bridge.
擴展:
    1.在設計中,可針對strategy和context信息交互的實際情況酌情進行
      耦合度的調整.
    2.在context中構置默認的concretestrategy,在用戶沒有特殊要求的
      情況下,提高概率意義上的性能提高.
    3.在具體的實現上,可以用模板來實現:
      template<typename concretestrategy>
      class context{
            private concretestrategy _strategy;
            public string operation(string m_STRcontext){
                   return _strategy.multi_method(m_STRcontext);
            }
      }                   

 

---------------------------------------------------------------------
                  聲明:本程式重在演示C#基本用法
                        不考慮在實際環境中應用帶來
                        其它問題的情況.
                 如:多線程.
                  系列文章聲明請見第一篇:
               [用設計模式鍛鍊C#系列]之Singleton、Bridge    
---------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章