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

worldblog發表於2007-12-13
[用設計模式鍛鍊C#系列]之Strategy (轉)[@more@]

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

// created on -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.首先還是的介面的原生支援interface.
  我們需要知道繼承類對它的簽名方法的實現
  必須是public.關於本人對它的看法詳見bridge篇.
  2.順便提及:C#不在支援初始化列表和預設引數的行為.
  3.其它關於很多實現機制原理同於Bridge.
擴充套件:
  1.在設計中,可針對strategy和context資訊互動的實際情況酌情進行
  耦合度的調整.
  2.在context中構置預設的concretestrategy,在沒有特殊要求的
  情況下,提高機率意義上的提高.
  3.在具體的實現上,可以用模板來實現:
  template
  class context{
  private concretestrategy _strategy;
  public string operation(string m_STRcontext){
  return _strategy.multi_method(m_STRcontext);
  }
  } 

 

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992933/,如需轉載,請註明出處,否則將追究法律責任。

相關文章