状态模式-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) ...
随机推荐
- jQuery搜索框自动补全功能插件实现-autocomplete.js
最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...
- linux运行apache出现403错误
1.文档权限问题,这是linux操作系统下经常会遇到的问题,需要使用chmod的指令把网站所在目录的权限提升到755.2.SElinux,开启它也会导致403错误的产生. 查看SELinux状态:1. ...
- C++11多线程のfuture,promise,package_task
一.c++11中可以在调用进程中获取被调进程中的结果,具体用法如下 // threadTest.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- Django-组件拾遗
Django的缓存机制 1.1 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候 ...
- Find a multiple POJ - 2356 (抽屉原理)
抽屉原理: 形式一:设把n+1个元素划分至n个集合中(A1,A2,…,An),用a1,a2,…,an分别表示这n个集合对应包含的元素个数,则:至少存在某个集合Ai,其包含元素个数值ai大于或等于2. ...
- 转载 使用axis2构建webservice
axis2是可以实现webservice的一个插件,使用这个插件可以发布webservice 1:可以使用这个插件来发布webservice,可以看网址:http://clq9761.iteye.co ...
- day14 Python百分号字符串拼接
拼接 # -*- coding:utf8 -*- #%s字符串,%d数字msg = '%s am %s my %s is %s'% (2,"charon","pluto& ...
- mybatis多数据源切换
文章转自https://yq.aliyun.com/articles/188540?t=t1 https://www.liaoxuefeng.com/article/00151054582348974 ...
- TStack与IBM LinuxONE通过兼容性认证
近日,腾讯云TStack与IBM LinuxONE通过兼容性认证,通过腾讯云TStack,可实现便捷管理IBM LinuxONE服务器.这为腾讯和IBM在未来多方面的商业合作奠定了坚实基础,也为腾讯云 ...
- NSTimer深入理解
NSTimer,即计时器,用于定时执行一些任务,一次或者多次. 系统Foundation框架提供的最常用方法如下,创建一个NSTimer,并将它放到当前runloop的default mode中. + ...