设计模式

UML 图:

设计模式

Context 上下文作为操纵策略的主体,里面包含了对策略接口属性

Strategy 为策略接口,不同的策略以不同的方式实现此接口的方法

ConcreteStrategy 为具体策略类

简述:说白了就是主体里面包含一个接口属性,通过向主体传递不同的接口实现类来对主体接口的实现进行替换,其实就是多态。这么做其实是侧重对于行为的抽象,遵循 "对修改关闭,对拓展开放" 的原则,有了对某一行为的策略抽象,那么以后便可以通过拓展策略类的方式来对主体内的策略行为进行替换改变。如果不是基于这种方式的替换,仍然要实现相同的替换效果,那么最朴素的办法就是使用 if-else 来进行判断选择,但是这样就....非常的爆炸了,你每多一个策略可能就要去源码修改 if-else 代码块,而且一堆判断代码的堆砌可读性十分之差。

使用场景:多个类只有算法或者行为上的稍有不同,那么可用策略模式将多个类融合成一个类

优点:如果你理解了上面的说明,自然能体会到它的好处

缺点:策略多的时候会产生众多的策略类,所有的策略类都需要对外暴露,用户需要知道到底有哪些个策略类以便选择对应策略。

例子:Comparator

拓展阅读:

策略模式与Comparator

缘何要使用 Context

策略模式的一些使用举例