今天学了策略模式
例子
一个售票系统,针对不同的用户使用不用的计价方式,
环境类:一个业务场景(电影票累,)
抽象类:计价算法
具体实现类:5折算法,满100减20算法,。。。。。
抽象策略类
abstract class AbstractStrategy { public abstract void Algorithm(); //声明抽象算法 }
具体策略类
class ConcreteStrategyA : AbstractStrategy { //算法的具体实现 public override void Algorithm() { //算法A } }
环境类
class Context { private AbstractStrategy strategy; //维持一个对抽象策略类的引用 public void SetStrategy(AbstractStrategy strategy) { this.strategy = strategy; } //调用策略类中的算法 public void Algorithm() { strategy.Algorithm(); } }
运行
…… Context context = new Context(); AbstractStrategy strategy; strategy = new ConcreteStrategyA(); //可在运行时指定类型,通过配置文件和反射机制实现 context.SetStrategy(strategy); context.Algorithm(); ……