当前位置: 首页 > news >正文

网站加图标属于您自己的网站建设

网站加图标,属于您自己的网站建设,开网店平台,鞍山人才网官网目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面#xff0c;应该会有不少的人接触到一个业务场景下#xff0c;一个数据的状态会发生多种变化#xff0c;最经典的例子例如订单#xff0c;当然还有像用户的状态变化#xff08;冻结…目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面应该会有不少的人接触到一个业务场景下一个数据的状态会发生多种变化最经典的例子例如订单当然还有像用户的状态变化冻结销户等文章的状态变化已发布草稿等。像这些具有多种状态的事物如果我们不进行一些措施来进行维护和扩展的话那么将会导致状态越难越难以管理而且对状态的转变也会越来越难以定义。 那么讲出了它现在存在的问题也就能大概知道本文要讲的是主要内容是什么了。没错状态机就是用来规范使用状态的各种变化的一种产物。 可能大家还不清楚这个玩意为什么产生我给大家一个场景如果没有一种严格的状态机控制那么像订单这种我们是不是可以直接从已下单的状态直接推进到已发货的状态而越过中间的支付等等的中间状态。这显然是有问题的。 在状态机当中具有四个概念用来控制状态的变化。一种状态需要迁移到下一种状态一定是经过某种行为或者事件转化到下一个状态。所以这也就成为了状态机的核心概念。​​​​​​ 状态States代表系统可能处于的各种状态例如 已下单、已支付、已发货 等。 事件Events触发状态转换的事件例如 下单、支付、发货 等。 动作Actions在状态转换发生时执行的操作或行为。 转换Transitions定义状态之间的转换规则即在某个事件发生时系统从一个状态转换到另一个状态的规则 2. 定义状态机 我们可以定义一个状态机并声明两个变量一个用来记录状态变化的记录一个用来记录要经过下一个状态需要的源状态与事件。在生成一个状态机的过程我们将记录他需要变化的所有的状态事件以及转换。 public class StateMachine {private MapString,String translatedTransitionsMap new HashMap();private SetString translatedTransitions new HashSet();private static final String DEFAULT_DELIMITER -;public StateMachine(Transition[] transitions){for (Transition transition : transitions) {translatedTransitions.add(transition.getFrom() DEFAULT_DELIMITER transition.getEvent() DEFAULT_DELIMITER transition.getTo());if(translatedTransitionsMap.containsKey(transition.getFrom() DEFAULT_DELIMITER transition.getEvent())){throw new RuntimeException(Duplicate transition found: transition.getFrom() DEFAULT_DELIMITER transition.getAction());}translatedTransitionsMap.put(transition.getFrom() DEFAULT_DELIMITER transition.getEvent(),transition.getTo());}}public String getNextState(String from, String event){return translatedTransitionsMap.get(from DEFAULT_DELIMITER event);}public boolean checkTransitions(String from, String even){return translatedTransitions.contains(from DEFAULT_DELIMITER event);}}过渡类的内容为 Data AllArgsConstructor NoArgsConstructor public class Transition {/*** 起始状态*/private String from;/*** 动作*/private String even;/*** 目标状态*/private String to;}3. 生成一个状态机 我们此次以订单举例生成一个订单的状态机 public class OrderStatusModel {private static StateMachine ORDEER_STATEMACHINE;static {ORDEER_STATEMACHINE new StateMachine(new Transition[]{new Transition(TradeStatusEnum.NEW.getStatus(), TradeEventEnum.CONFIRM.name(), TradeStatusEnum.WAIT_PAY.getStatus()),new Transition(TradeStatusEnum.NEW.getStatus(), TradeEventEnum.CANCEL.name(), TradeStatusEnum.CLOSED.getStatus()),new Transition(TradeStatusEnum.WAIT_PAY.getStatus(), TradeEventEnum.PAY.name(), TradeStatusEnum.PAY_SUCCESS.getStatus()),new Transition(TradeStatusEnum.WAIT_PAY.getStatus(), TradeEventEnum.PAY_CANCEL.name(), TradeStatusEnum.CANCELLED.getStatus()),new Transition(TradeStatusEnum.PAY_SUCCESS.getStatus(), TradeEventEnum.CONFIRM_SUCCESS.name(), TradeStatusEnum.COMPLETED.getStatus())});}public static String getTargetStatus(TradeStatusEnum currentStatus, TradeEventEnum tradeEventEnum) {return ORDEER_STATEMACHINE.getNextState(currentStatus.getStatus(), tradeEventEnum.name());}}订单状态枚举 Getter public enum TradeStatusEnum {/*** 新建订单*/NEW(NEW, 新建订单),/*** 锁单成功-待支付状态*/WAIT_PAY(WAIT_PAY, 待支付),/*** 支付成功*/PAY_SUCCESS(PAY_SUCCESS, 支付成功),/*** 已完成*/COMPLETED(COMPLETED,已完成),/*** 已取消*/CANCELLED(CANCELLED,已取消),/*** 订单关闭*/CLOSED(CLOSED,订单关闭);private String status;private String desc;TradeStatusEnum(String status, String desc) {this.status status;this.desc desc;} } 订单事件 public enum TradeEventEnum {/*** 订单确认*/CONFIRM,/*** 取消订单*/CANCEL,/*** 支付*/PAY,/*** 支付取消*/PAY_CANCEL,/*** 订单确认成功*/CONFIRM_SUCCESS,/*** 订单完成*/FINISH } 4. 使用 Data public class TradeOrder {private String orderId;private String status;private double price;public TradeOrder confirm(TradeCreateRequest request) {this.setStatus(OrderStatusModel.getTargetStatus(request.getTradeStatus(), TradeEventEnum.CONFIRM));return this;}public TradeOrder pay(TradeWaitPayRequest request) {this.setStatus(OrderStatusModel.getTargetStatus(request.getTradeStatus(), TradeEventEnum.CANCEL));return this;} }传参为 public class TradeCreateRequest extends BaseResquest{Overridepublic TradeStatusEnum getTradeStatus(){return TradeStatusEnum.NEW;} }public abstract class BaseResquest {abstract TradeStatusEnum getTradeStatus(); }
http://www.hkea.cn/news/14574647/

相关文章:

  • 怎么利用代码做网站企业网站维护是指
  • 网站建设的大公司有哪些菜单宣传网站怎么做
  • 做网站怎样建立服务器西安SEO网站推广
  • 借用备案网站跳转做淘宝客网站推广软件价格
  • 云南网站建设维修公司哪家好app下载网站免费
  • 安徽网站优化好不好免费crm软件
  • wordpress企业建站教程 百度 下载重庆正云环保工程有限公司网页制作
  • 中国建设网官方网站下载e路最新版主流建站公司
  • 深圳网站建设公司有哪些内容成都app开发
  • 网站制作网站建设个人可以做导航网站吗
  • 成都建设公司网站百度seo新规则
  • 内网网站 建设目标我的个人网站 的网页设计
  • 视频网站开发架构浙江城乡和住房建设网
  • 做纯净系统的网站代理游戏网站
  • 网页制作官方网站泰州做网站软件
  • 怎样建设网站公司做网站是什么专业
  • 南充市住房和城乡建设厅网站北京外贸网站设计备案
  • 做网站公司青浦灯饰如何做网站推广
  • 深圳营销型网站制作佛山新网站建设平台
  • 做网站编辑我能力得到提升紫网站建设
  • 做动漫的网站四川建设网站官网
  • 新网站设计最简单的软件怎么做网站8uftp
  • 手机如何开发软件濮阳网站怎么做seo
  • 怎样给网站做关键词优化游戏搜索风云榜
  • 北京开发办网站搬家公司网站模板
  • 怎样做网站表白wordpress只换域名
  • 建立网站的相关信息台州网络推广
  • 网站都是h5响应式上海闵行是郊区吗
  • 长春火车站防疫政策开发小程序需要哪些技术
  • 做金融必看网站html网页设计介绍