分析&回答
策略模式定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法的变化不会影响到使用算法的客户。
策略模式将每一个算法封装到一个具有公共接口的独立类中,解除了客户与具体算法的直接耦合,是客户改变算法更为容易。
策略模式+简单工厂+反射+配置文件可以组成更为灵活的方式。
实例代码讲解:
/**
* 算法的公共接口
*/
abstract public class Strategy{
public abstract void AlgorithmInterface();
}
/**
* 具体算法A
*/
public class ConcreteStrategyA:Strategy{
public override void AlgorithmInterface(){
Console.Write("具体算法A");
}
}
/**
* 具体算法B
*/
public class ConcreteStrategyB:Strategy{
public override void AlgorithmInterface(){
Console.Write("具体算法B");
}
}
/**
* 具体算法C
*/
public class ConcreteStrategyC:Strategy{
public override void AlgorithmInterface(){
Console.Write("具体算法C");
}
}
/**
* 上下文,用来维护一个对Strategy对象的引用。
*/
public class Context{
private Strategy strategy;
public Context(Strategy strategy){
this.strategy=strategy;
}
//上下文接口
public void ContextInterface(){
strategy.AlgorithmInterface();
}
}
/**
* client端
* @param args
*/
static void Main(string[] args)
{
Context context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.ReadLine();
}
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!