Java状态设计模式 / "子状态"

3

我正在使用 Java 编程语言,同时运用 State 设计模式,示例如下: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 1AState 1BState2 ;)。 - shA.t
2个回答

3
"Sub-state"是什么意思?在状态模式中,没有任何可以被视为“子状态”的东西。“State”代表实体的状态。每个状态都是一个状态。除非你对你所要实现的内容给出合理的解释,否则我认为你的想法是错误的。
只要所有状态都共享同一基类/接口,它就能工作。你可以在状态之间建立继承关系,它仍然能够工作,并且这与状态模式无关。即使你有继承关系,它们仍然是“状态”,而不是“子状态”。

OP在谈论UML,它允许状态的层次嵌套。这样,相关的状态可以被抽象成超级状态,而嵌套的状态则被称为子状态(在此帖子中描述得非常好)。 - martin

0

通常情况下,如果没有更多关于您要建模的领域的信息,就很难说。但是您可能会发现有两种主要情况:

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

就像我之前所说的,第二种情况很少见,但在某些设计中确实会出现。

希望对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接