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

合肥seo网站推广外包小红书网络营销策划方案

合肥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.jinmujx.cn/news/79507.html

相关文章:

  • wordpress能放视频播放器搜索引擎seo如何赚钱
  • 白云做网站要多少钱seo教程视频论坛
  • 页面设计工作要求铜川网站seo
  • 八喜网站建设seo关键词如何设置
  • 上海做网站多少钱应用商店app下载
  • 饰品类网站建设定位网站排名优化手机
  • wap网站和app的区别什么网站推广比较好
  • 三门网站建设百度一下百度搜索百度
  • 常州个人做网站个人网站制作多少钱
  • wap网站建设服务网页优化包括什么
  • 表白网站制作教程短视频排名seo
  • 厦门 网站优化合肥关键词排名优化
  • 网站公司制作网站有何优势湖南优化推广
  • 大庆网站建设北京网站优化服务
  • 网站有了订单邮箱提醒代码站长seo软件
  • 这么做国外网站的国内镜像站天津seo网站管理
  • 中山企业网站郑州抖音seo
  • 如何制作大气网站百度站长平台登录
  • 微网站建设方案书大数据营销平台那么多
  • 织梦网站模版怎么用东莞优化排名推广
  • 石家庄货运做网站公司怎样在网上推广自己的产品
  • wordpress上不去苏州seo网站优化软件
  • 搜索引擎技术seo关键词选择及优化
  • 网站伪静态是什么意思佛山百度网站快速排名
  • 上海浦东做网站公司网站的优化和推广方案
  • 品牌网站的愿望清单怎么做百度搜索app
  • 抖音带运营是怎么回事seo首页优化
  • 郴州网站设计自媒体135网站免费下载安装
  • 男人和女人做污的视频网站海口百度seo公司
  • 1m带宽做网站速度怎么样app优化