状态模式-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) ...
随机推荐
- win7系统保护配置现错误“文件名、目录名或卷标语法不正确。(0x8007007B)
windows7下系统保护功能很是鸡肋,有事会出现一下两个问题: 1.出现错误“文件名.目录名或卷标语法不正确.(0x8007007B) 2.保护设置列表中出现“Windows7_os(c:)(找不到 ...
- 17秋 软件工程 Alpha展示博客
成员简介 姓名 个人简介 博客地址 郑世强 郑世强,计算机三班,了解java web端和Android端编程,使用过Spring MVC和Spring Boot开发商业程序,Android端学习了rx ...
- python scrapy 登录知乎过程
前面了解了scrapy框架的大概各个组件的作用, 现在要爬取知乎数据,那么第一步就是要登录! 看下知乎的登录页面发现登录主要是两大接口 一: 登录页面地址,获取登录需要的验证码,如下图 打开知乎登录页 ...
- 轻量级服务器部署方案 -(阿里云CenOS+宝塔)
一台服务器部署多个应用.可部署前端工程.node服务.数据库等. 一.服务器选择合适的服务器,购买即可.服务器商1.阿里云 2.腾讯云 3.百度云 二.服务器管理面板-宝塔宝塔面板是一款服务器管理软件 ...
- VC++界面编程之--仿Facebook透明登录窗体
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/renstarone/article/details/27642765 1. 开发工具:VC++ DU ...
- [CQOI2016]K远点对
嘟嘟嘟 做过[国家集训队]JZPFAR这道题的话,这题就不难了. 我们维护一个长度为\(k\)的小根堆,在加入第\(i\)个点之前,用\([1, i - 1]\)这些点离点\(i\)的距离更新答案.这 ...
- oracle批量插入数据(测试)
做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法.产生测试数据的SQ ...
- Oracle数据库查询优化(上百万级记录如何提高查询速度)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引 ...
- oracle远程物化视图
一.创建远程物化视图日志 源端: CREATE MATERIALIZED VIEW LOG ON tozwdb.test tablespace tozwdb_data WITH ROWID; 二.付权 ...
- day04--流程控制之if
编程的目的是让计算机像人脑一样工作,因此就需要让计算机具备人脑一样的逻辑思维,这里就需要用到计算机语言的流程控制: 流程控制之if......else 语法1: if 条件: 代码块 # 一组代码块的 ...