设计模式之策略模式
# 设计模式之策略模式
# 一、简介
定义了一组可互相代替的算法,一个类的行为或算法可以在运行时更改
特别是当 if-else
块中的代码量比较大时,后续的扩展和维护会变得非常复杂并且容易出错。在阿里《Java开发手册》中,有这样的规则:超过3层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现
# 二、实现方式
# 抽象策略类(IStrategy)
public interface IStrategy { /** * 策略方法 */ void strategyInterface(); }
1
2
3
4
5
6
7
8# 具体策略类(ConcreteStrategy)
//策略A public class ConcreteStrategyA implements IStrategy{ @Override public void strategyInterface() { //TODO } } //策略B public class ConcreteStrategyB implements IStrategy{ @Override public void strategyInterface() { //TODO } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 上下文类(Context):持有策略对象的引用
public class Context { private IStrategy iStrategy; public Context(IStrategy strategy){ this.iStrategy = strategy; } public void contextStrategy(){ iStrategy.strategyInterface(); } }
1
2
3
4
5
6
7
8
9
# 三、应用场景
# 1、JAVA线程池ThreadPoolExecutor中的策略模式:拒绝策略RejectedExecutionHandler
RejectedExecutionHandler
是一个拒绝策略接口,有四种拒绝策略的实现。关系图如下
我们可以根据自己的业务场景,选择合适的线程池拒绝策略