策略模式定义
定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换。
策略模式结构图
策略模式角色介绍
抽象策略类,Strategy,一个抽象类或具体类,也可以是接口,负责声明算法接口;客户端面向抽象策略类编程,持有抽象策略类类型成员变量。
具体策略类,ConcreteStrategy,它实现了在抽象策略类中声明的算法,在运行时,客户端的抽象策略类型成员变量指向具体策略类对象,使用一种具体的算法实现某个业务处理。
策略模式结构代码
抽象策略类:
public interface Strategy {
void request();
}
具体策略A:
public class ConcreteStrategyA implements Strategy {
public void request() {
System.out.println("我是策略A");
}
}
具体策略B:
public class ConcreteStrategyB implements Strategy {
public void request() {
System.out.println("我是策略B");
}
}
客户端:
public class Client {
public static void main(String[] args) {
//按照策略A执行
Strategy strategy = new ConcreteStrategyA();
strategy.request();
//按照策略B执行
strategy = new ConcreteStrategyB();
strategy.request();
}
}
策略模式运行机制
策略模式中客户端持有抽象策略类型成员变量;
所有的策略子类负责实现各种策略算法;
实际业务中,随着业务需要,客户端抽象策略类型成员变量不断变换指向的具体策略对象,执行不同的策略算法;
策略模式是依赖倒转和里氏替换原则的具体体现。
策略模式解决的核心问题
策略模式为业务提供所有策略算法,客户端可以按需随时替换使用;策略模式解决了逻辑中if判断问题,可以随时对策略进行扩展,符合开闭原则;