java继承层次结构,在状态模式中实现继承层次结构 - java

2023-10-27

我有一个与此非常相似的设计:

这里的NewOrder,Registered&Granted都有通用方法AddOrderline()和Cancel(),因此将这两种方法重构为父类很容易。

当我要Cancel一条Shipped行(当前未在图中显示)时,会出现问题。

由于发运行不支持AddOrderline(),因此我需要将NewOrder的父类打破,将已注册并授予的类分为2类,一类用于Cancel(),另一类用于AddOrderline()。

现在NewOrder必须扩展2个父类才能获得2个函数。

笔记

这个例子非常简化。我的实际应用程序大约有12个状态。

该代码使用PHP,但是欢迎使用C#或Java解决方案,因为我认为该解决方案将是相似的,因为它们都不支持多重继承。

java参考方案

我会考虑将接口与实现分开。例如在Java中

interface Cancellable {

void cancel();

}

interface Shippable{

void ship();

}

等等

public class NewState implements Cancellable, Shippable {

public void cancel() { ... }

public void ship() { ... }

}

如果您有一个基础私有国家,则它可以实现所有必需的接口,而您的公共国家只需要委派那些受支持的国家即可。例如

public class UnderlyingState implements Cancellable, Shippable ... {

public void cancel() { ... }

public void ship() { ... }

}

public class ShippableState implements Shippable {

private UnderlyingState ustate = new UnderlyingState();

public void cancel() {

// you can *only* cancel this

ustate.cancel();

}

}

在上面,您可能需要返回一个新的状态对象(而不是void),并让您的Order采用该新状态。 UnderlyingState对象将强制执行某些状态机。

令人头疼的是,随着状态数量的增加,接口和实现也随之增加。

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java继承层次结构,在状态模式中实现继承层次结构 - java 的相关文章

  • chrome扩展开发中文教程

    chrome扩展开发中文教程 文档地址 http chrome cenchy com index html 既然是中文文档 可能存在翻译的过程 就会出现翻译更新不及时的情况 如果看最新最准确的文档 请移步到官方文档
  • 轻松高薪之---java基础(一)

    轻松高薪系列将分为五期为大家呈现 java基础 WEB 数据库 框架 技术点五大部分 由于每一个内容比较多 每一部分将分为若干小结进行分享 欢迎持续跟踪 一 Java 基础 1 Java 基础 知识 1 1 面向对象的特征 了解 面向对象的
  • CUDA编程(七)共享内存与Thread的同步

    CUDA编程 七 共享内存与Thread的同步 在之前我们通过block 继续增大了线程的数量 结果还是比较令人满意的 但是也产生了一个新的问题 即 我们在CPU端的加和压力变得很大 所以我们想到能不能从GPU上直接完成这个工作 我们知道每
  • ES6笔记( 五 )- Object

    目录 新增的对象字面量语法 成员速写 方法速写 计算属性名 新增的Object方法 Object is Object assign Object setPrototypeOf Object keys Object values Object
  • 内联函数总结

    定义 它们看起来像函数 运作起来像函数 比宏 macro 要好得多 使用时还不需要承担函数调用的负担 当内联一个函数时 编译器可以对函数体执行特定环境下的优化工作 这样的优化对 正常 的函数调用时不可能的 规则 inline关键字必须和函数
  • vue+vue-matomo实现埋点

    安装 npm install vue matomo save main js import createApp from vue import manotoUse from utils manotoUse import router fro
  • linux 符号连接文件,Linux 硬链接和软链接(符号链接)

    什么是目录 Linux 文件系统是树状结构的 根目录下存在一系列子目录 目录里边有文件或者子目录 但问题在于 目录是什么 文件又是什么 文件是 数据 属性 比如名字 创建时间 所有者之类 目录是 一个列表 列表中的每一项是 inode gt
  • 婴幼儿奶酪怎么选

    总原则 天然奶酪 高钙 少钠 无添加剂 奶酪 分天然奶酪 和再制奶酪 天然奶酪成分非常简单 是主要以牛奶为原材料 没有经过深加工的原生奶酪 再制奶酪配料表复杂 是天然奶酪加上水 以及添加剂后的产物 营养价值降低不少 天然奶酪 并且高钙低钠是
  • Ubuntu18.04 “A start job is running for Raise network interface(5min 1s)”

    在启动Ubuntu时出现如下情况 5min过后 虽然会进入ubuntu的用户登陆界面 但是登陆成功后 输入ifconfig命令 如下图 会发现ens33中没有ip地址 因此xshell无法与该虚拟机进行远程连接 经过分析 我采用的连接方式为
  • java swing 天天酷跑游戏 功能完善 完整代码 下载即可以运行

    今天天气不错 利用一段时间给大家分享一个天天酷跑的游戏435 该游戏也属于一个比较优秀的作品 整个系统界面漂亮 有完整得源码 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进步 开发环境 开发语言为Java 开发环境Eclipse或
  • 使用 styled-components 定义组件样式

    每个项目产品都要加埋点 加500行埋点是不是会占用你一两天的时间而且很容易犯错 想只用一小时准确加完这500行埋点剩下一天喝茶聊天么 来试试这520web工具 高效加埋点 目前我们公司100号前端都在用 因为很好用 所以很自然普及开来了 推
  • django-xadmin自定义widget插件(自定义详情页字段的显示样式)

    有时候我们想要修改xadmin详情页字段的显示方式 比如django默认的ImageField在后台显示的是image的url 我们更希望看到image的缩略图 再比如django将多对多字段显示为多选的下拉框或者左右选择栏的方式 向图片展
  • axios+qs发送ajax请求获取接口数据

    axios qs发送ajax请求获取接口数据 一 html页面中需要引入axios和qs库 如下 二 后台接口如下 1 getDemo1接口 测试传参id 必须 和 name 不必须 CrossOrigin RestController p
  • sort排序

    文章目录 一 Arrays sort 1 1 基本数据类型排序 1 2 引用对象类型排序 二 Collections sort Java中常用的数组或集合排序的方法有两个 一个是java util Arrays中的静态方法Arrays so
  • 案列 : 提供index.html页面,页面中有一个省份 下拉列表 2. 当 页面加载完成后 发送ajax请求,加载所有省份

    一 首先明确需求 案例需求 1 提供index html页面 页面中有一个省份 下拉列表 2 当 页面加载完成后 发送ajax请求 加载所有省份 二 数据库编写 CREATE DATABASE NBA 创建数据库 USE NBA 使用数据库
  • 深度学习第一篇论文——半监督学习Mean Teacher 的学习

    最近一个月刚接触深度学习 导师给了一篇论文 mean teacher 让我先理解然后跑论文里面的代码 这个过程中我出现了很多问题 借这篇blog记录下来 也是鼓励自己接着学下去 Mean Teacher 的论文地址 https arxiv
  • jsp之cookie的基本操作&&实现用户登录cookie记录用户信息

    jsp状态管理 因为http的无状态性 所以可以用session或cookie技术保存用户信息 而cookie可以记录信息可以判定注册用户是否已经登录网站 购物车的应用 浏览记录 但是有安全风险 创建cookie Cookie cookie
  • keil调试查看ROM或RAM

    Ctrl F5或点击调试按钮进入调试界面 在工具栏上点击Memory Windows 则右下角出现Memory1的页面 默认出现的是ROM的查看界面 在Address一栏输入十六进制的地址即可查看ROM里面的数值 点击Memory Wind
  • 动态修改JavaBean中的注解的参数值

    我这里有一个需求需要修改Person类中的一个属性上的注解的值进行修改 例如 public class Person private int age ApiParam access lala private String name get

随机推荐

  • 怎么做验收测试?

    本文是本系列文章的第四篇 也是最后一篇 主要讲述我们在Lyft面对越来越多的开发人员和服务时 如何扩展开发实践 第一部分 开发和测试环境的历史 第二部分 加快本地开发的一些优化 第三部分 预发布环境通过重载形式来扩展服务网格 第四部分 怎么
  • halcon给图像添加不同颜色的透明遮罩(叠加透明ROI)

    目录 前言 方法 1 给单通道图像添加透明遮罩 2 给RGB图像添加透明遮罩 参考链接 前言 最近想给图片叠加上透明region方便展示 以前一直用overpaint region算子搭配add image就行 这次用单通道图竟然叠加出来的
  • typec耳机知识介绍

    数字耳机和模拟耳机 模拟耳机即我们的常见的3 5mm接口的耳机 包括左右声道 地或者mic 如左图 数字耳机 右图 包含一个usb声卡 DAC ADC amp 模拟耳机 当数字耳机接入到手机 otg 或者电脑后 手机或者电脑识别到了usb设
  • 如何在本地测试ajax时间,为什么在本地测试ajax反应很慢

    在本地测试ajax接收分页数据 要反应1s左右 以上 但是放到服务器上就100ms到 900多ms之间 有什么好的办法解决ajax获取速度慢吗 已经把分页数据换成json了 没多大改善 数据大小显示是在2 9kb 耗时1 03s 处理逻辑就
  • C++ 虚函数、虚函数表剖析

    C 中的虚函数的作用主要是实现了多态的机制 关于多态 简而言之就是用父类型别的指针指向其子类的实例 然后通过父类的指针调用实际子类的成员函数 那么问题来了C 又是如何实现这种技术的呢 C 使用了一种动态绑定的技术 这个技术的核心是虚函数表
  • jQuery中delegate和on的用法与区别详细解析

    在jQuery1 7中 delegate 已被 on 取代 对于早期版本 它仍然使用事件委托的最有效手段 在事件绑定和委派 delegate 和on在一般情况下 这两种方法是等效的 delegate 指定的元素 属于被选元素的子元素 添加一
  • MySQL报错注入函数汇总

    常用函数 字符串连接函数 将多个字符串连接成一个字符串 当中间字符串有一个为空时 最后结果也为空 concat str1 str2 str3 concat ws 指定分隔符 str1 str2 str3 开头指定分隔符 与concat 不同
  • cpp课程设计实验题:定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生

    定义Staff 员工 类 由Staff分别派生出Saleman 销售员 类和Manager 经理 类 再由Saleman 销售员 类和Manager 经理 类采用多重继承方式派生出新类SaleManager 销售经理 类 各类之间的继承关系
  • cmake中使用find_package查找vcpkg中的BOOST 包遇到的坑

    有人说vcpkg对于boost库暂时不支持find package 链接 其实是支持的 set BOOST VERSION 1 78 find package Boost REQUIRED COMPONENTS graph program
  • 用观测数据推断因果的问题(一文搞懂混杂因素、辛普森悖论)

    聊到因果推断与相关性的关系 大家其实都已经有一个认知叫做 相关性 因果性 但学界从统计推断发展到后来因果推断是经历了一个漫长的过程 直到今天 我们仍然基础的对数据的处理和认知离不开统计推断的方法 所以学习了解用观测数据做因果推断可能导致的问
  • N皇后问题(代码)

    N皇后问题 include lt stdio h gt include lt math h gt define N 4 判断第k个皇后目前放置位置是否与前面的皇后冲突 in isplace int pos int k int i for i
  • java学习小随笔—类中赋值的错误认知

    在java的类中 只能声明变量和方法 不能赋值 public class people int n 10 m m 10 上面的代码就是错误的 int n 10 m 语句中 属于声明语句 n在声明的同时初始化 m 10 属于赋值语句 在jav
  • kali无法连接外网

    今天用虚拟机时 无法连接外网 在网上搜了各种解决方法 windows下的VM服务都开了 其他也没有什么错 虚拟机使用NAT模式 查看我的虚拟网络编辑器 发现我的NAT模式是在113网段下的 而我linux的ip地址是在137网段下的 但是我
  • 对浏览器内核的理解

    简单来说 浏览器内核是浏览器的核心 也称 渲染引擎 用来解释网页语法并渲染到网页上 浏览器内核决定了浏览器该如何显示网页内容以及页面的格式信息 浏览器内核又可以分成两部分 渲染引擎和JS引擎 渲染引擎 负责获取网页的内容并显示 不同的浏览器
  • git修改commit日志

    由于公司对版本提交日志进行检查 如果不符合要求 则push失败 以下是修改commit日志的方法 1 进入到提交代码文件所在目录 即git所在目录下 cd app repository 2 git log git log commit bf
  • Rabbit MQ详解

    一 什么是RabbitMQ 答 RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件 简单来说就是一个消息中间件 是一种程序对程序的通信方法 其服务器也是以高性能 健壮以及可伸缩性出名的Erlang语言编写而成 二 Rab
  • nc文件经度从0-360更改为-180到180,并保存

    从0 360改为 180到180 import xarray as xr rawnc path InPath ds xr open dataset rawnc path lon name lon 你的nc文件中经度的命名 ds longit
  • Python数据分析与机器学习----收入的预测分析

    一 题目 利用age workclass native country等13个特征预测收入是否超过50k 是一个二分类问题 二 训练集 32561个样本 每个样本14个特征 其中6个连续性特征 9个离散型特征 三 测试集 16281个样本
  • Open3D(C++) 四元数奇异值分解

    目录 一 算法原理 1 原理概述 2 实现过程 3 参考文献 二 代码实现 三 结果展示 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 算法原理 1 原理概述 四元数矩阵的奇异值分解
  • java继承层次结构,在状态模式中实现继承层次结构 - java

    我有一个与此非常相似的设计 这里的NewOrder Registered Granted都有通用方法AddOrderline 和Cancel 因此将这两种方法重构为父类很容易 当我要Cancel一条Shipped行 当前未在图中显示 时 会