该设计模式,本人也是初次使用在于退款系统逻辑重构方面(解决一些状态下不允许发生的操作发生的情况,比如重复退款,无法退款等)

public class Constants {
public static final String STATEMACHINE_STATUS_APPLY = "1"; //状态
public static final String STATEMACHINE_ACTION_ONE_PASS   = "ACTION_ONE_PASS";//动作

}

public class Item {//提供状态罗列public String currStatus;public String action;public String targetStatus;public Item(String currStatus,String action,String targetStatus){
//状态罗列的类 初始状态 动作 目标状态this.currStatus = currStatus;this.action = action;this.targetStatus=targetStatus;}
}public class StateConfig {public final static Item stateItems[] = new Item[]{
//根据业务添加的状态机基础状态
//apply applypass applypassed
new Item(Constants.STATEMACHINE_STATUS_APPLY, Constants.STATEMACHINE_ACTION_ONE_PASS, Constants.STATEMACHINE_STATUS_ONE_PASS),
};}
@Repository
public class StateController {//状态机具体实现public static boolean checkStatus(String status,String action){Item[] items = StateConfig.stateItems;if (items == null || items.length == 0 ) {return true;}for (Item item : items) {if(item.currStatus.equalsIgnoreCase(status) && item.action.equalsIgnoreCase(action)){return true;}}return false;}
}

在controller层使用状态机方法

@Autowired StateController statecontroller

在方法内调用

//返回一个Boolean类型,可以在if里面做判断
stateController.checkStatus(Bean.getStatus(), Constants.STATEMACHINE_ACTION_ONE_PASS)

有的人可能就会觉得,这个状态机方法很鸡肋,不如直接if else来的快,但是在开发过程中,不断地if else嵌套会导致代码的可读性大大降低,而且本文中并没有展示更加完整的状态机使用,仅仅只是展示了状态机最基础的进入功能判断。完整的状态机功能主要是会有一个注册状态的类,在方法结束之后判断初始状态与结束状态在不在已经注册的状态类当中,返回的也是Boolean类型,会更加的适用,且容易看懂。如果想要深入了解可以从gitee上面搜索项目来深入一下。

状态机设计模式(java中的使用)相关推荐

  1. java 生成器 设计模式_Java中的生成器设计模式

    java 生成器 设计模式 Java 中的 Builder设计模式是一种创建模式,即用于创建对象,类似于 工厂方法设计模式 ,这也是创建设计模式. 在学习任何设计模式之前,我建议先找出特定设计模式要解 ...

  2. Java中23种设计模式(随时不定时更新)

    一.创建型模式 1.单例模式(Singleton Pattern) 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种模式涉及到一个单一的类,该类负责创建自己的对 ...

  3. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  4. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  5. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

  6. java中策略设计模式_Java中的设计模式(五):策略模式

    策略设计模式是行为设计模式之一.当我们为特定任务使用多个算法时,使用策略模式,客户端决定在运行时使用的实际实现. 策略模式的最佳示例之一是Collections.sort()采用Comparator参 ...

  7. java责任链设计模式_Java中的责任链设计模式

    java责任链设计模式 在本教程中,我们将学习如何在Java中实现责任链模式. 责任链设计模式涉及到拥有一系列负责处理请求的对象链. 当客户端发送请求时,第一个处理程序将尝试处理该请求. 如果可以处理 ...

  8. java策略设计模式_Java中的策略设计模式

    java策略设计模式 策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设 ...

  9. Java中的责任链设计模式

    在本教程中,我们将学习如何在Java中实现责任链模式. "责任链"设计模式涉及到拥有一系列负责处理请求的对象链. 当客户端发送请求时,第一个处理程序将尝试处理该请求. 如果可以处理 ...

  10. Java中的外观设计模式

    立面是指建筑物的外观. 当穿过街道时,我们所看到的只是建筑物的外观. 该图面抽象了建筑物的所有复杂实施细节. 同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口. 这个统一的接口对客户端隐藏了 ...

最新文章

  1. 16s扩增子分析注意事项和经验总结Tips
  2. XmlValidatingReader
  3. do {...} while (0) 在宏定义中的作用
  4. linux命令:ftp
  5. 数据对象类代码的生成小工具
  6. 20200912 texstudio 添加到字典的错误单词如何删除
  7. linux内核_查看Linux内核版本
  8. Linux网络编程 -- socketpair的使用
  9. zabbix监控mysql操作
  10. 太慢不能忍!CPU 又拿硬盘和网卡开刀了!
  11. c语言getchar在哪个头文件_c语言入门(一)
  12. IS-IS详解(十二)——IS-IS 路由过载、管理标记和主机名映射
  13. 自定义圆形进度条ProgressBar
  14. MDM数据质量应用说明
  15. php 磅和像素的换算,将g/cm³换算为磅每液量加仑(美国) (克每立方厘米换算为磅每液量加仑(美国))...
  16. Window7使用虚拟桌面
  17. 2020年Gartner新兴技术成熟度曲线,AI持续增强
  18. 【Shading】Shading 着色
  19. 自制月球灯第一期之无线充电篇
  20. 四、项目计划(华为项目管理法-孙科炎读书摘要)

热门文章

  1. Go语言 linux下开发 IDE -SpaceVim\NeoVim
  2. 2016年,上海的互联网企业是否值得加入?
  3. 麦克风阵列研究3 定向录音
  4. 渗透测试工具网址--自用
  5. 汽车销售发票扫描识别系统助力汽车业
  6. 夜空中的守望者的目光
  7. 卸妆·回归:“超级医保局时代“的医院信息化转型
  8. AICON分论坛 | 昇思MindSpore探索人工智能发展新路径
  9. python输出学生姓名成绩学号_打印所有学生的姓名,学号,性别,年龄,成绩信息...
  10. 质因数的分解(java)