1.定义
所谓策略模式,就是封装了一组相关算法,算法之间彼此可以相互替换,将行为从使用它的客户端抽离出来,封装变化。
2.场景
客户在处理相关业务的时候,不同的场景下会有不同的算法处理逻辑,不同的算法之间只是行为不同,可以在运行时指定
对应的算法。
3.类图
4.代码
/// <summary> /// 策略接口 /// </summary> public interface IStrategy { void Cal(); }
public class ConcreteStrategyA:IStrategy { public void Cal() { //操作 } }
public class ConcreteStrategyB:IStrategy { public void Cal() { //操作 } }
public class Context { public IStrategy strategy; public Context(IStrategy s) { this.strategy = s; } public void setStrategy(IStrategy s) { this.strategy = s; } public void Perform() { this.strategy.Cal(); } }
4.理解
策略模式应用了设计原则的开闭原则,软件实体应该对修改关闭,对扩展开放,增加算法的时候,直接扩展相关的接口实现算法类即可
,不用修改原来的代码。 同时也应用了接口隔离原则,针对接口编程,不针对实现。
5.优点、缺点
优点:
1.增加算法的时候不用修改客户端调用逻辑,只增加一个类就可以
2.避免多重条件判断(在其他模块中决定)
缺点:
1.所有的算法类都需要对外暴露,上层模块要知道都有哪些策略,然后才可以决定采用哪种,可以通过工厂模式、代理模式和享元模式进行修正。