策略模式是一种行为型模式,其定义了一系列的算法(行为),将算法封装起来,这样它们可以实现相互替换使用,且算法的使用不会影响算法使用的客户。例如:诸葛亮在面对司马懿时,使用空城计,在赤壁之战中使用草船借箭计,就可以将两个计略封装成两个算法,到时间调用即可。
namespace Designmode.Strategy
{
/// <summary>
/// 统一的行为接口
/// </summary>
public interface IStrategy
{
/// <summary>
/// 策略行为
/// </summary>
void DoSomething();
}
}
namespace Designmode.Strategy
{
/// <summary>
/// 草船借箭策略的实现类
/// </summary>
public class CaoChuanJieJianJi : IStrategy
{
public void DoSomething()
{
Console.WriteLine("使用草船借箭计");
}
}
}
namespace Designmode.Strategy
{
/// <summary>
/// 空城计策略的实现类
/// </summary>
public class KongChengJi : IStrategy
{
public void DoSomething()
{
Console.WriteLine("使用空城计");
}
}
}
namespace Designmode.Strategy
{
/// <summary>
/// 策略的使用者
/// </summary>
public class User
{
/// <summary>
/// 用户名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 用户使用策略
/// </summary>
/// <param name="s"></param>
public void Do(IStrategy s)
{
Console.WriteLine($"{this.Name} do something");
//TODO: usr 使用s做某些事情
s?.DoSomething();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.Strategy;
namespace Designmode
{
class Program
{
static void Main(string[] args)
{
#region 策略模式
User zhugeliang = new User() {Name ="诸葛亮" };
//TODO:诸葛亮使用草船借箭计
zhugeliang.Do(new CaoChuanJieJianJi());
//TODO: 诸葛亮使用空城计
zhugeliang.Do(new KongChengJi());
#endregion
}
}
}