状态模式状态中的常见行为

时间:2013-08-30 13:30:31

标签: design-patterns state behavior

您有一台具有3种状态和2种方法的ATM机。如果这是模式的phesudo实现。

01-- class AbstractATMState
02-- Operation1
03-- Operation2
04--
05-- class State1 : AbstractATMState
06-- Operation1
07-- Operation2
08-- 
09-- class State2 : AbstractATMState
10-- Operation1
11-- Operation2
12-- 
13-- class State3 : AbstractATMState
14-- Operation1
15-- Operation2

如果Operation1对于3个状态具有相同的行为,则只需将实现放在Operation1的第02行,但如果Operation1仅针对2个状态具有相同的实现,该怎么办?和第三个不同的实现?如何在不重复代码的情况下解决这个问题?

P.S。这当然是一个非常简化的情况示例,但同样的概念将继续说明有40个州将要实施7个行动。

1 个答案:

答案 0 :(得分:0)

Operation1的定义放在AbstractATMState中,并在State3中覆盖它。

将它放在第2行,然后在第14行中添加一个不同的实现。当你从State3调用它时,它将使用线性化(如果你想查找它)来获得最合适的版本,这是它自己的类中的那个,如果它存在,而不是基类。但它需要State1State2的基类版本,因此您不需要为它们提供自己的实现。