策略模式
实现一个功能有多重算法(策略),根据环境或条件选择不同的算法(策略)来完成该功能。这些算法(策略)之间可相互替换,而不会影响到使用算法的客户。
/// <summary>
/// 抽象策略类: 定义所有支持的算法的公共接口
/// </summary>
public interface IStrategy
{
void operate();
}
/// <summary>
/// 具体策略类: 实现抽象策略类的具体算法
/// </summary>
public class BackDoor : IStrategy
{
public void operate()
{
Console.WriteLine("找乔国老帮忙,让吴国太给孙权施加压力,使孙权不能杀刘备");
}
}
/// <summary>
/// 具体策略类: 实现抽象策略类的具体算法
/// </summary>
public class GivenGreenLight : IStrategy
{
public void operate()
{
Console.WriteLine("求吴国太开个绿灯,放行");
}
}
/// <summary>
/// 具体策略类: 实现抽象策略类的具体算法
/// </summary>
public class BlackEnemy : IStrategy
{
public void operate()
{
Console.WriteLine("孙夫人断后,挡住追兵");
}
}
/// <summary>
/// 环境类, 维护对策略类的引用
/// </summary>
public class Context {
IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
public void SetStratege(IStrategy strategy) {
this.strategy = strategy;
}
public void Operate()
{
strategy.operate();
}
}
class Program
{
static void Main(string[] args)
{
//刘备要到江东娶老婆了,走之前诸葛亮给赵云三个锦囊妙计,说是按天机拆开能解决棘手问题。
Context context = new Context(new BackDoor());
context.Operate();
context.SetStratege(new GivenGreenLight());
context.Operate();
context.SetStratege(new BlackEnemy());
context.Operate();
Console.ReadKey();
}
}
浙公网安备 33010602011771号