我用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
还是有其他方法?搜索我没有找到这样的例子。
答案 0 :(得分:3)
“子国家”的含义是什么?在国家模式中,没有什么可以被视为“子国家”。 “州”代表实体的状态。每个州都是一个州。除非你对你想要达到的目标做出合理的解释,否则我认为你在思考一些不正确的事情。
只要所有州共享相同的基类/接口,它就会起作用。您可能在状态之间具有继承关系,它仍然可以工作,并且它与状态模式无关。而且,即使你有继承关系,它们仍然是“状态”,而不是“子状态”
答案 1 :(得分:0)
如果没有关于您尝试建模的域的更多信息,总是有点难以说。但是你可能会发现主要案例:
State1A
和State1B
可以作为State1
的子类。State1
选项A和B以及State2
选项A和B中。虽然不是常见情况,但有时会发生这种情况,这意味着您的对象实际上有两种类型的状态。如何处理这一点很大程度上取决于各州之间的相互作用;如果它们是独立的,那么您可以将它们建模为单独的层次结构。如果他们依赖于他们的行为,那么State
类可以反过来具有内部状态A
和B
。正如我所说,第二种情况很少见,但在某些设计中它会发生。
HTH