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