策略模式

in Develop

Strategy策略模式是属于设计模式中对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.
它的UML图


Strategy是一个策略类,其中定义一个或多个算法接口
ConcreteStrategy是实现算法接口的具体策略类
Context是上下文应用

比如,我要从龙阳路去浦东国际机场,我可以选择坐公交、可以选择打车、可以选择坐磁悬浮。
这里的乘车方式就是一个可变的,因此独立为一接口
如策略接口

public interface IToAerodrome
{
void ToDo();
}

实现该接口(算法)的具体类

public class ByBus : IToAerodrome
{
#region IToAerodrome 成员

public void ToDo()
{
Console.WriteLine("乘坐公交车去机场");
}

#endregion
}
public class ByTaxi : IToAerodrome
{
#region IToAerodrome 成员

public void ToDo()
{
Console.WriteLine("我乘坐出租车去机场");
}

#endregion
}

public class ByTrain : IToAerodrome
{
#region IToAerodrome 成员

public void ToDo()
{
Console.WriteLine("坐每小时200公里的磁悬浮");
}

#endregion
}


public class ToAerodromeStrategy
{
IToAerodrome _ToAerodrome;
/// <summary>
/// 构造函数,以实现IToAerodrome的类实体为参数
/// </summary>
/// <param name="toAerodrome"></param>
public ToAerodromeStrategy(IToAerodrome toAerodrome)
{
_ToAerodrome = toAerodrome;
}

/// <summary>
/// 改变当前的策略
/// </summary>
/// <param name="toAerodrome"></param>
public void ChangeStrategy(IToAerodrome toAerodrome)
{
_ToAerodrome = toAerodrome;
}

/// <summary>
/// 执行方法
/// </summary>
public void Go()
{
_ToAerodrome.ToDo();
}
}

context

static void Main(string[] args)
{
ToAerodromeStrategy to = new ToAerodromeStrategy(new ByBus());
to.Go();
Console.WriteLine("我要改坐磁悬浮");
to.ChangeStrategy(new ByTrain());
to.Go();
Console.Read();
}

执行结果

3 Comments

3 Comments

  1. 看不懂….不过今天又问题要问:

    幻想曲 我很菜

    我现在想知道.NET 的优势 和asp 比 安全?? php呢??

    另外:幻想曲的工作是??? 程序,能不能具体点? 网站系统?erp? 嵌入式软件? 什么呢??

  2. asp单一脚本语言,asp.net可用C#、VB、VC等多种语言
    asp解释执行,asp.net编译执行
    asp面向过程,asp.net面向对象
    asp无自己的类库,asp.net有自己庞大的类库
    asp无专用IDE,asp.net有VS.NET(据说是最好的IDE)
    ……^_^

  3. 都说.net 好,我手上这个网站却是非常地差,功能方面让我郁闷到家。
    要不是不懂得如何处理更换后的路径问题,早就要换了程序去。

    不过幻想曲这个博客的程序还是很不错的,:up:

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>