设计模式:
- 它定义了算法家族,分别封装起来,让它们之间可以替换,此模式让算法的变化,不会影响到使用算法的客户。
示例代码:
//抽象算法类
abstract class Strategy {
//算法方法
public abstract void AlgorithmInterface();
}
- ConcreteStrategy,封装了具体的算法或行为,继承于Strategy
//具体算法A
class ConcreteStrategyA : Strategy {
//算法A实现方法
public override void AlgorithmInterface() {
Console.WriteLine("算法A实现");
}
}
//具体算法B
class ConcreteStrategyB : Strategy {
//算法B实现方法
Console.WriteLine("算法B实现");
}
//具体算法C
class ConcreteStrategyC : Strategy {
//算法C实现方法
Console.WriteLine("算法C实现");
}
- Context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用
//上下文
class Context {
Strategy strategy;
//初始化时,传入具体的策略对象
public Context(Strategy strategy) {
this.strategy = strategy;
}
//上下文接口
//根据具体的策略对象,调用其算法的方法
public void ContextInterface() {
strategy.AlgorithmInterface();
}
}
static void Main(String[] args) {
Context context;
//由于实例化不同的策略,所以最终在调用context.ContextInterface();时,所获得的结果就不尽相同
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}