策略模式,定义与封装了一系列的算法,并能相互间进行替换,且独立于使用者进行变化。
一、关键点
1)先看下这个模式点关键点:
算法集: 该模式根据业务定义了一系列的算法,进行了特殊的封装,相互间能相互替换,并能进行灵活的拓展;
独立变化:该模式的一个比较明显的特点就是独立于客户端的变化,而不依赖与客户端,灵活地进行升级与策略实现。
2)我们再来看下它的类图关系:
Context:操作策略的上下文;
Strategy:策略的抽象类;
ConcreteStrategy:策略的具体实现。
二、实现
2.1 策略抽象类Stragety
public abstract class Strategy {
abstract void algorithm();
}
2.2 策略具体实现ConcreteStragety
public class ConcreteStrategyA extends Strategy {
@Override
void algorithm() {
/** Strategy of 'A' */
}
}
public class ConcreteStrategyB extends Strategy {
@Override
void algorithm() {
/** Strategy of 'B' */
}
}
2.3 策略操作的上下文Context
public class Context {
private Strategy mStrategy;
public Context(Strategy strategy) {
mStrategy = strategy;
}
public void algorithmInterface() {
mStrategy.algorithm();
}
}
2.4 客户端对象Client
public class Client {
public static void main(String[] args) {
Context context;
context = new Context(new ConcreteStrategyA());
context.algorithmInterface();
context = new Context(new ConcreteStrategyB());
context.algorithmInterface();
}
}
三、小结
3.1 解耦。该模式以算法集的形式,将原来有与客户端的依赖关系独立开来,结构更清晰、拓展更加方便;
3.2 独立变化。由于进行了解耦,算法就能独立于客户端进行需要的变化,更加灵活;
3.3 开闭原则。这个模式也很好地体现了开闭原则,根据业务的变化,直接进行拓展即可,而不用影响到原有的算法集。