在很多的计算场合,我需要在不同的时间、地方,用不同的算法计算数据;那么就引入了我们的今天要讲的策略设计模式;什么是策略设计模式?就是定义了算法的家族,分别封装起来,让他们之前可以相互的进行替换,此模式让算法的变化,不影响使用算法的客户端;
Strategy代码如下:
abstract class Strategy
{
//算法方法
public abstract void AlgorithmInterface();
}
ConcreteStrategy是对Strategy类的继承并实现了具体的算法,
ConcreteStrategyA类代码(其他的类代码相似)如下:
<pre name="code" class="csharp">public class ConcreteStrategyA:Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法A的具体实现");
}
}
public class Context
{
Strategy strategy;
//初始化具体的策略对象
public Context(Strategy strategy)
{
this.strategy=strategy;
}
//根据具体的策略对象调用其算法的方法
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
客户端代码:
static void main(string[] arg)
{
Context context;
context=new Context(new ConcreteStrategyA());
context.ContextInterface();
//其他的代码类似
}
咱们在实际的项目开发中,我们可以用把简单工厂模式和这个模式结合,把客户端判断的逻辑移动到工厂类中;减少客户端知道的类,后续在运维的时候,更加方便。