名称: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 --------------------------------------------------------------------- 
|