3

我正在用 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还是有其他方法?搜索我没有找到任何这样的例子。

4

2 回答 2

3

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

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

于 2012-11-12T01:51:01.063 回答
0

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

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

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

高温高压

于 2012-11-12T13:08:08.630 回答