繁体   English   中英

Java 状态设计模式/“子状态”

[英]Java State design pattern / "substates"

我用 Java 编码,我使用状态设计模式,如下例: http : //onjavahell.blogspot.fr/2009/05/simple-example-of-state-design-pattern.html

然而,我得到的 UML 是这样的:

+---------+        +---------+ 
| Context |--------|  State  |
+---------+        +---------+ 
                        |
               +----------------+
               |                |
          +---------+       +---------+
          | State 1 |       | State 2 |
          +---------+       +---------+
               |
       +----------------+
       |                |
  +----------+       +----------+
  | State 1A |       | State 1B |
  +----------+       +----------+

我有“子状态”。 如何编码? 我应该将抽象类State 1还是有其他方法? 搜索我没有找到任何这样的例子。

“子状态”是什么意思? 在状态模式中,没有什么可以被视为“子状态”。 “State”代表实体的状态。 每个州都是一个州。 除非你对你想要达到的目标给出合理的解释,否则我相信你的想法是不正确的。

只要所有状态共享相同的基类/接口,它就会起作用。 你可能有状态之间的继承关系,它仍然有效,与状态模式无关。 而且,即使你有继承关系,它们仍然是“状态”,而不是“子状态”

如果没有有关您尝试建模的域的更多信息,一如既往有点难以说。 但是,您可能会发现主要情况:

  • 您的状态是不相交的,并且响应IS-A原则(在这里您可以找到更多详细信息和有关它的讨论)。 在这种情况下, State1AState1B可以作为State1子类。
  • 您的状态可以组合,因此在State1选项 A 和 B 以及在State2选项 A 和 B 中是有意义的。虽然不是常见情况,但有时会发生这种情况,这意味着您的对象实际上有两种类型的状态. 如何处理这在很大程度上取决于国家之间的互动; 如果它们是独立的,那么您可以将它们建模为单独的层次结构。 如果它们依赖于它们的行为,那么State类又可以具有内部状态AB

正如我所说,第二种情况很少见,但在某些设计中会发生。

HTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM