簡體   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