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

如何进行电商网站设计如何下载网页在线视频

如何进行电商网站设计,如何下载网页在线视频,公众号开发难吗,泉州seo排名扣费自定义统一状态机流转设计 StateMachine接口通用状态机 BaseStateMachine举例实现状态事件OrderStateMachine(BaseStateMachine实现类)使用 状态机用于描述一个系统在不同状态之间的转换和行为,是状态模式的一种具体应用。状态机是一种抽象的计算模型,它…

自定义统一状态机流转设计

  • StateMachine接口
  • 通用状态机 BaseStateMachine
  • 举例实现
    • 状态
    • 事件
    • OrderStateMachine(BaseStateMachine实现类)
    • 使用

状态机用于描述一个系统在不同状态之间的转换和行为,是状态模式的一种具体应用。状态机是一种抽象的计算模型,它包含有限个状态和转换规则,用于描述系统在不同状态下如何响应输入以及在不同输入下如何进行状态转换。

一个状态机通常包含以下几个要素:

状态(States):代表系统可能处于的各种状态,例如 “已下单”、“已支付”、“已发货” 等。
事件(Events):触发状态转换的事件,例如 “下单”、“支付”、“发货” 等。
转换(Transitions):定义状态之间的转换规则,即在某个事件发生时,系统从一个状态转换到另一个状态的规则。
动作(Actions):在状态转换发生时执行的操作或行为。

一般我们在工作中,我们的主要的业务单据都会有一个状态的设计,我们会通过状态图画出他的状态流转情况,而控制这些状态如何流转,就是状态机干的事儿。

如果没有一个严格的状态机控制的话,我们是可以随便修改订单的状态的,我们可以在已下单状态直接推进到已发货状态,这显然是不对的。

而状态机就是来控制这个状态的流转的他的目的都是把状态、事件、转换以及动作封装在一起的,他把这些东西内聚在一起了。有了它,一个已下单状态的订单,只能通过支付事件来驱动,并且还会有一些其他的约束,比如支付金额>0(转移条件)等,然后他的下一个状态只能是已支付这样的。

StateMachine接口

public interface StateMachine<STATE, EVENT> {/*** 状态机转移** @param state 状态* @param event 事件* @return*/public STATE transition(STATE state, EVENT event);
}

通用状态机 BaseStateMachine

提供一个添加状态转换的方法 从state1转换到state2需要通过event事件
添加一个状态机将这个状态机放到体格map中
比如从CREATE到CONFIRM状态需要通过CONFIRM事件 在map中添加
(key: CREATE_CONFIRM value: CONFIRM)
实现transition方法 通过state和event事件得到target状态

public class BaseStateMachine<STATE, EVENT> implements StateMachine<STATE, EVENT> {private Map<String, STATE> stateTransitions = Maps.newHashMap();/*** 初始化状态机状态转换* @param origin 原状态* @param event 需要经过的事件* @param target 目标状态*/protected void putTransition(STATE origin, EVENT event, STATE target) {stateTransitions.put(Joiner.on("_").join(origin, event), target);}@Overridepublic STATE transition(STATE state, EVENT event) {STATE target = stateTransitions.get(Joiner.on("_").join(state, event));if (target == null) {throw new BizException("state = " + state + " , event = " + event, STATE_MACHINE_TRANSITION_FAILED);}return target;}
}

举例实现

状态

public enum TradeOrderState {/*** 订单创建*/CREATE,/*** 订单确认*/CONFIRM,/*** 已付款*/PAID,/*** 交易成功*/FINISH,/*** 订单关闭*/CLOSED,/*** 废单,用户看不到*/DISCARD;
}

事件

public enum TradeOrderEvent {/*** 订单创建*/CREATE,/*** 订单确认*/CONFIRM,/*** 订单创建并确认*/CREATE_AND_CONFIRM,/*** 订单支付*/PAY,/*** 订单取消*/CANCEL,/*** 订单超时*/TIME_OUT,/*** 订单完成*/FINISH,/*** 订单废弃*/DISCARD;
}

OrderStateMachine(BaseStateMachine实现类)

初始化一系列状态流转

public class OrderStateMachine extends BaseStateMachine<TradeOrderState, TradeOrderEvent> {public static final OrderStateMachine INSTANCE = new OrderStateMachine();{putTransition(TradeOrderState.CREATE, TradeOrderEvent.CONFIRM, TradeOrderState.CONFIRM);putTransition(TradeOrderState.CONFIRM, TradeOrderEvent.PAY, TradeOrderState.PAID);//库存预扣减成功,但是未真正扣减成功,也能支付/取消,不能因为延迟导致用户无法支付/取消。putTransition(TradeOrderState.CREATE, TradeOrderEvent.PAY, TradeOrderState.PAID);putTransition(TradeOrderState.CREATE, TradeOrderEvent.CANCEL, TradeOrderState.CLOSED);putTransition(TradeOrderState.CREATE, TradeOrderEvent.TIME_OUT, TradeOrderState.CLOSED);//订单创建过程中失败,推进到废弃态,这种状态用户看不到订单putTransition(TradeOrderState.CREATE, TradeOrderEvent.DISCARD, TradeOrderState.DISCARD);putTransition(TradeOrderState.CONFIRM, TradeOrderEvent.DISCARD, TradeOrderState.DISCARD);//已支付后,再确认,状态不变putTransition(TradeOrderState.PAID, TradeOrderEvent.CONFIRM, TradeOrderState.PAID);putTransition(TradeOrderState.CONFIRM, TradeOrderEvent.CANCEL, TradeOrderState.CLOSED);putTransition(TradeOrderState.CONFIRM, TradeOrderEvent.TIME_OUT, TradeOrderState.CLOSED);putTransition(TradeOrderState.PAID, TradeOrderEvent.FINISH, TradeOrderState.FINISH);}}

使用

如果状态转换失败 抛出异常
如果成功 获取到转换后的状态

TradeOrderState orderState = OrderStateMachine.INSTANCE.transition(this.getOrderState(), request.getOrderEvent());
http://www.dtcms.com/wzjs/590055.html

相关文章:

  • 天津网站免费制作网站建设文字表达
  • 建设网站什么语言比较合适网络推广服务商产品介绍
  • 新泰网站设计wordpress gzip
  • 潍坊专业做网站的公司找设计方案的网站
  • 一个微信网站多少钱crm公司
  • 织梦网站地图生成老板让我做镜像网站犯法吗
  • 网站没有备案可以访问吗怎么实现网站建设报价方案
  • a 朝扬网络网站建设网站结构分析怎么写
  • 白山网站建设公司wordpress如何设置注册
  • 广州富邦物流网站建设企业网站代码怎么优化
  • 合肥市建设局网站wish跨境电商平台官网
  • 外贸网站服务器推荐开发公司工程项目管理流程文件
  • 网站设计制作公司地址软件公司网站
  • 自己做网站网页文件在哪里温江网站建设价格
  • 查询网站怎么做的北京工商登记
  • wordpress主题的网站模板百度seo软件优化
  • 在线做炫图网站地旺建设官方网站
  • 济南浩特元辰建设工程有限公司网站成都开网站
  • 网站需要服务器吗如何新建网页
  • 织梦网站后台如何做百度优化空白word个人简历模板下载
  • 企业建站 源码自己建设一个网站需要多少钱
  • 网站建设色彩个人网站 不用备案吗
  • 巩义建设网站wordpress页面显示摘要
  • 漳州城乡和建设局网站wordpress投稿设置
  • 顺德区网站设计建设企业广东新闻联播2011
  • 做淘宝客网站教程使用apmserv本地搭建多个网站
  • 做商城网站要什么手续费网页设计布局分析
  • 界面设计网站全网推广
  • 电脑做会计从业题目用什么网站百度商桥绑定网站
  • 关于建设网站的需求济南网站建设工作室