状态模式-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) ...
随机推荐
- PHP 截取字符串乱码的解决方案
今天遇到一个坑,左右调试坑的我一脸懵逼,当我们对一条字符串进行截取的时候,通常第一个想到的就是substr()函数了,但是如果是中文+数字的字符串的话,这时候使用substr进行截取就会出现乱码的问题 ...
- .net core 入坑经验 - 3、MVC Core之jQuery不能使用了?
在View中添加了一段jQuery代码用来控制一个按钮的点击事件.发现运行时提示$对象没有定义,经过在浏览器右键查看源文件发现,script代码在引用jquery代码的上方,执行时jquery还未引入 ...
- switch语句(初学者)
C语言提供了另一种用于多分支选择的switch语句(常用于开关),一般形式为: switch ( 常量表达式 ) { case 常量1 :语句; case 常量2 :语句; case 常量3 :语句; ...
- C#深度学习の----深拷贝与浅拷贝
本人在进行编程的时候遇到一个问题,要对一个绑定的依赖属性进行赋值,改变属性中的某一部分,绑定的目标上的所有值都发生了变化,着并不是我想要的,由此引出深浅拷贝的问题.(请加群交流:435226676) ...
- json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1
问题描述:使用Python代码将txt城市列表文件转换为xls文件,源码如下, #!/usr/bin/env Python # coding=utf-8 import os import json i ...
- [零基础学python]为什么要开设本栏目
这个栏目的名称叫做"零基础学Python". 如今网上已经有不少学习python的课程.当中也不乏精品.按理说,不缺少我这个基础类型的课程了.可是,我注意到一个问题.无论是课程还是 ...
- 【微软编程一小时】题目1 : Arithmetic Expression
时间限制:2000ms 单点时限:200ms 内存限制:256MB 描写叙述 Given N arithmetic expressions, can you tell whose result is ...
- pandas中的数值计算及统计基础
import pandas as pd import numpy as np df = pd.DataFrame({ 'key1': [4, 5, 3, np.nan, 2], 'key2': [1, ...
- 第一行代码 -3-1 软件也要拼脸蛋-UI界面
<ListView android:id="@+id/list_view" android:layout_width="match_parent" and ...
- docker官方文档学习-1-Docker for mac安装配置
https://docs.docker.com/docker-for-mac/ Get started with Docker for Mac 首先像在本博客docker-1-环境安装及例子实践处将环 ...