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

wordpress xml文件长沙seo招聘

wordpress xml文件,长沙seo招聘,网站筛选功能,做标书的网站目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面,应该会有不少的人接触到一个业务场景下,一个数据的状态会发生多种变化,最经典的例子例如订单,当然还有像用户的状态变化(冻结…

目录

1. 概念

2. 定义状态机

3. 生成一个状态机

4. 使用


1. 概念

        在Java的应用开发里面,应该会有不少的人接触到一个业务场景下,一个数据的状态会发生多种变化,最经典的例子例如订单,当然还有像用户的状态变化(冻结,销户等),文章的状态变化(已发布,草稿等)。像这些具有多种状态的事物,如果我们不进行一些措施来进行维护和扩展的话,那么将会导致状态越难越难以管理,而且对状态的转变也会越来越难以定义。

        那么讲出了它现在存在的问题,也就能大概知道本文要讲的是主要内容是什么了。没错,状态机就是用来规范使用状态的各种变化的一种产物。

        可能大家还不清楚这个玩意为什么产生,我给大家一个场景,如果没有一种严格的状态机控制,那么像订单这种,我们是不是可以直接从已下单的状态直接推进到已发货的状态,而越过中间的支付等等的中间状态。这显然是有问题的。

        在状态机当中,具有四个概念,用来控制状态的变化。一种状态需要迁移到下一种状态,一定是经过某种行为或者事件转化到下一个状态。所以这也就成为了状态机的核心概念。​​​​​​

  1. 状态(States):代表系统可能处于的各种状态,例如 "已下单"、"已支付"、"已发货" 等。

  2. 事件(Events):触发状态转换的事件,例如 "下单"、"支付"、"发货" 等。

  3. 动作(Actions):在状态转换发生时执行的操作或行为。

  4. 转换(Transitions):定义状态之间的转换规则,即在某个事件发生时,系统从一个状态转换到另一个状态的规则

2. 定义状态机

我们可以定义一个状态机,并声明两个变量,一个用来记录状态变化的记录,一个用来记录要经过下一个状态需要的源状态与事件。在生成一个状态机的过程,我们将记录他需要变化的所有的状态,事件以及转换。

public class StateMachine {private Map<String,String> translatedTransitionsMap = new HashMap<>();private Set<String> 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/163334/

相关文章:

  • 我有一个域名怎么做网站百度一下下载
  • 郑州网站建设品牌好安装百度到桌面
  • 株洲做网站定制百度灰色词优化排名
  • 上海网页设计公司兴田德润电话排名优化外包公司
  • 做360网站优化快推广普通话宣传语手抄报
  • 动态网站开发语言有哪些大学生创新创业大赛
  • 关键词推广公司网站网络排名优化方法
  • 福州移动网站建设网络营销推广工具有哪些
  • win2008sr怎么用iis做网站国外网站加速
  • 合肥++网站建设磐石网站seo
  • 万网主机怎么上传网站如何在百度上投放广告
  • 做网站时如何给文字做超链接全球疫情最新数据消息
  • 四川省住建厅官方网站3分钟搞定网站seo优化外链建设
  • 做网站阳泉巨量千川广告投放平台
  • 温岭哪里有做网站的如何自制网站
  • 知道创于 wordpress搜索引擎优化宝典
  • 乌兰县wap网站建设公司有效获客的六大渠道
  • 微信网站开发教程视频教程百度一下主页官网
  • 网站开发专业前景关键词挖掘排名
  • 网站开发属于什么职位类别seo查询站长工具
  • wordpress postmetaseoul national university
  • 商务网站的主要存在形式杭州百度快照优化公司
  • 个人备案网站做购物网站可以不班级优化大师免费下载电脑版
  • 贸易网站建设互联网广告代理加盟
  • 深圳网站建设网络公司河北关键词排名推广
  • 在工商网上怎么注册公司seo优化博客
  • 免费的小程序怎么赚钱历下区百度seo
  • 河北石家庄最新疫情最新消息优化防疫政策
  • 一站式做网站哪家强新闻小学生摘抄
  • 江西南昌网站建设公司哪家好谷歌google 官网下载