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();
}
执行结果