ITPub博客

首页 > 应用开发 > IT综合 > [用设计模式锻炼C#系列]之Strategy (转)

[用设计模式锻炼C#系列]之Strategy (转)

原创 IT综合 作者:worldblog 时间:2007-12-13 15:44:07 0 删除 编辑
[用设计模式锻炼C#系列]之Strategy (转)[@more@]

名称: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
  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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2405613