状态模式-State-订单状态
JAVA设计模式-状态模式-State-订单状态

解释:
- abstract class OrderState {
- abstract void confirm(OrderContext orderContext);
- abstract void modify(OrderContext orderContext);
- abstract void pay(OrderContext orderContext);
- }
具体状态类
- class OrderedState extends OrderState {
- @Override
- void confirm(OrderContext orderContext) {
- System.out.println("订单已确认");
- orderContext.setState(new ConfirmedState());
- }
- @Override
- void modify(OrderContext orderContext) {
- System.out.println("订单已修改");
- orderContext.setState(this);
- }
- @Override
- void pay(OrderContext orderContext) {
- System.out.println("预定状态无法完成订单!");
- }
- }
- class ConfirmedState extends OrderState {
- @Override
- void confirm(OrderContext orderContext) {
- System.out.println("订单已确认,请勿重复确认");
- }
- @Override
- void modify(OrderContext orderContext) {
- System.out.println("订单已修改,请再次确认");
- orderContext.setState(new OrderedState());
- }
- @Override
- void pay(OrderContext orderContext) {
- System.out.println("订单已支付,无法再修改");
- orderContext.setState(new LockedState());
- }
- }
- class LockedState extends OrderState {
- @Override
- void confirm(OrderContext orderContext) {
- System.out.println("订单已锁定");
- }
- @Override
- void modify(OrderContext orderContext) {
- System.out.println("订单已锁定");
- }
- @Override
- void pay(OrderContext orderContext) {
- System.out.println("订单已锁定");
- }
- }
背景类
- class OrderContext {
- OrderState state = null;
- //新建订单设为已预定状态
- OrderContext() {
- this.state = new OrderedState();
- }
- void setState(OrderState state) {
- this.state = state;
- }
- public void confirm() {
- state.confirm(this);
- }
- public void modify() {
- state.modify(this);
- }
- public void pay() {
- state.pay(this);
- }
- }
测试:
- public static void main(String[] args) {
- OrderContext orderContext = new OrderContext();
- orderContext.confirm(); //已预定状态>已确认状态
- orderContext.modify(); //已确认状态>已预定状态
- orderContext.confirm(); //已预定状态>已确认状态
- orderContext.pay(); //已确认状态>已锁定状态
- orderContext.modify(); //已锁定状态
- }
- 订单已确认
- 订单已修改,请再次确认
- 订单已确认
- 订单已支付,无法再修改
- 订单已锁定
状态模式-State-订单状态的更多相关文章
- 大熊君说说JS与设计模式之------状态模式State
一,总体概要 1,笔者浅谈 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式主要解决的是当控制一个对象状态的条件表达式过于 ...
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 二十四种设计模式:状态模式(State Pattern)
状态模式(State Pattern) 介绍允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例有一个Message实体类,对它的操作有Insert()和Get()方法, ...
- 设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 状态模式-State Pattern(Java实现)
状态模式-State Pattern 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. State接口 ...
- 北风设计模式课程---状态模式State(对象行为型)
北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...
- 《JAVA设计模式》之状态模式(State)
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...
- 状态模式(State)-设计模式
软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板.软件模式并非仅限于设计模式,还包括 架构模式.分析模式和过程模式等,实际上,在软件生存期的每一个阶段都存在着一些被认 ...
- 【UE4 设计模式】状态模式 State Pattern
概述 描述 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类. 其别名为状态对象(Objects for States),状态模式是一种对象行为型模式. 有限状态机(FSMs) ...
随机推荐
- linux E325: 注意 发现交换文件 "*.swp" 解决方法
今天在linux里修改脚本文件时,不小心非正常关闭了脚本文件,再次编辑时,每次都提示 如下错误: E325: 注意发现交换文件 ".bqh.sh.swp" 所有者: root 日期 ...
- Linux运维平台工具:pstree、ps、top、htop、free、vmstat、dstat、kill、killall
1.pstree命令 查看进程树,centos7下统一由systemd进行管理 [root@ELK-chaofeng systemd]# pstree systemd─┬─AliYunDun───*[ ...
- 解决Windows10或者其他版本Windows Update报错的问题
最近更新系统,发现报错0x80248014,系统版本为redstone2(创意者更新). 总结发现,只要是windows各个版本自动更新报错的,如0x80开头的一系列错误,都可以通过如下步骤解决: 手 ...
- Linux 小知识翻译 - 「虚拟化技术」
这次聊聊「虚拟化技术」. 虚拟化技术,有时简称为「虚拟化」,最近经常听人说它.但是却不太清楚它的意思.到底虚拟了什么东西?本来是用来干什么的? 有名的虚拟化软件要数 VMware 和 VirtualB ...
- The resource configuration is not modifiable in this context.
项目中使用了Jersey RESTful 框架, 更新代码后服务能正常起来, 在页面登录时验证码不显示 后台报错 java.lang.IllegalStateException: The resour ...
- java news website
http://javacrawl.com/ https://dzone.com/java-jdk-development-tutorials-tools-news https://www.infowo ...
- Python进阶(二)
高阶函数 1.把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 2.Python内建了map( )和reduce( ) 函数 map()函数接收两个参数,一个是函数 ...
- 变量计算——强制类型转换的js面试题
console.log(1+"2"+"2"); console.log(1++"2"+"2"); console.log ...
- 转://SIHA环境修改主机名实施步骤
目 录1 实施需求 2 修改主机名 2.1 停止HAS服务 2.2 修改主机名 3 重新配置服务 3.1 使用root用户重新配置CSS & OHAS服务 3.2 设置cssd自动启动属性 3 ...
- PHP数组转为树的算法
一.使用引用 function listToTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) { $tree = ...