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

这里的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大神给出的解决方案 如果您不喜欢循环,则…

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

  1. 状态模式java 在线投票_Java 状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...

  2. java state用法_Java状态模式(State模式)

    State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elsei ...

  3. java状态模式例子答案_[转载]java设计模式_状态模式(带例子)

    状态模式(STATE) Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编 ...

  4. java继承的范例_Java范例中的继承

    java继承的范例 Inheritance in java is one of the core concepts of Object Oriented Programming. Java Inher ...

  5. Java 设计模式之 State 状态模式

    状态模式用于根据状态决定行为的场景. 比如一个人处于不同的心情时,会说不同的话,会做不同的事情,说话和做事由状态决定. 这里可以将心情设计为一个抽象类,开心,伤心,抑郁时的说话,做事的行为作为抽象方法 ...

  6. java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

    因此,父类构造函数是在Java中调用的,而在Python中则不是.如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Pa ...

  7. java方法重载_在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  8. 使java方法全部折叠_Intellij IDEA中一次性折叠所有Java代码的快捷键设置

    Intellij IDEA中一次性折叠所有Java代码的快捷键设置 问题:在Java文件中,想把所有的Java方法代码都一次性给折叠起来,用哪个点开哪个. 问题来源:在新建model bean的时候, ...

  9. java gradle构建_在Gradle中为JPMS构建Java 6-8库

    java gradle构建 通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS( Java平台模块系统 )的Java 6-8库. 介绍 如果您需要JPMS ...

最新文章

  1. CVPR2020:点云三维目标跟踪的点对盒网络(P2B)
  2. 在线GPU分布式实验环境+企业级项目,轻松斩获offer
  3. 验证RIP被动接口只收不发的正确性
  4. 软件工程到底是干嘛的....
  5. (剑指Offer)面试题10:二进制中1的个数
  6. Research on NFT
  7. 2021年 面经面试题
  8. 威联通NAS通过宝塔面板实现域名统一端口访问
  9. POJ - 3630 Phone List(字典树)
  10. 关于Jeecg互联网化dubbo改造方案(上)
  11. linux后台运行python程序 nohup不挂断
  12. Java基础(六) static五大应用场景
  13. 对一个正整数n,求出n!中末尾0的个数。
  14. 如何在引导程序中将容器垂直对齐
  15. win7下配置Apache本地虚拟主机
  16. java高级-反射的三种实例化模式及与工厂,单例模式的的关系
  17. oracle 安装包_【Oracle监控】-Spotlight On Oracle安装和使用
  18. 网易云音乐歌单解析下载源码
  19. jsf+EJB开发实例
  20. Linux下解压和压缩jar文件

热门文章

  1. linux之vim复制多行、光标跳转到指定行、插入当前光标上和下行
  2. Linux之dd命令详解
  3. 【C语言简单说】十:小结
  4. 光线在传播过程中是否会有变化?可以通过镜子接力的方式抵达目的地吗!?...
  5. 车窗上为啥总有一些小黑点?没想到居然藏着大作用!
  6. 神奇的机械动态图,看了一遍又一遍!最后一个真神奇~
  7. 雨雪出行伴侣,优质PVC时尚鞋套,防滑/防水更耐磨
  8. php7 不是有效的32位,Win7系统安装软件提示“不是有效的win32应用程序”怎么办?...
  9. androidstudio学习总结_Android 开发工程师自述:2年的开发,我总结了7条经验
  10. linux创建目录目录文件,Linux创建目录和文件管理教程