元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 设计模式

    • 设计模式简介
    • 设计模式之单例模式
    • 设计模式之工厂模式
    • 设计模式之原型模式
    • 设计模式之建造者模式
    • 设计模式之适配器模式
    • 设计模式之桥接模式
    • 设计模式之组合模式
    • 设计模式之装饰器模式
    • 设计模式之外观模式
    • 设计模式之享元模式
    • 设计模式之代理模式
    • 设计模式之责任链模式
    • 设计模式之命令模式
    • 设计模式之解释器模式
    • 设计模式之迭代器模式
    • 设计模式之中介者模式
    • 设计模式之备忘录模式
    • 设计模式之观察者模式
    • 设计模式之状态模式
    • 设计模式之策略模式
      • 一、简介
      • 二、实现方式
        • 抽象策略类(IStrategy)
        • 具体策略类(ConcreteStrategy)
        • 上下文类(Context):持有策略对象的引用
      • 三、应用场景
        • 1、JAVA线程池ThreadPoolExecutor中的策略模式:拒绝策略RejectedExecutionHandler
      • 四、思维导图
    • 设计模式之模版模式
    • 设计模式之访问者模式
    • 设计模式辨析篇
  • 高可用

  • 系统设计
  • 设计模式
元月
2022-08-20
目录

设计模式之策略模式

# 设计模式之策略模式

# 一、简介

定义了一组可互相代替的算法,一个类的行为或算法可以在运行时更改

特别是当 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是一个拒绝策略接口,有四种拒绝策略的实现。关系图如下

我们可以根据自己的业务场景,选择合适的线程池拒绝策略

# 四、思维导图

#设计模式
设计模式之状态模式
设计模式之模版模式

← 设计模式之状态模式 设计模式之模版模式→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式