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

时间:2012-11-12 01:43:42

标签: java oop design-patterns state

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

2 个答案:

答案 0 :(得分:3)

“子国家”的含义是什么?在国家模式中,没有什么可以被视为“子国家”。 “州”代表实体的状态。每个州都是一个州。除非你对你想要达到的目标做出合理的解释,否则我认为你在思考一些不正确的事情。

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

答案 1 :(得分:0)

如果没有关于您尝试建模的域的更多信息,总是有点难以说。但是你可能会发现主要案例:

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

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

HTH