您有一台具有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个行动。
答案 0 :(得分:0)
将Operation1
的定义放在AbstractATMState
中,并在State3
中覆盖它。
将它放在第2行,然后在第14行中添加一个不同的实现。当你从State3
调用它时,它将使用线性化(如果你想查找它)来获得最合适的版本,这是它自己的类中的那个,如果它存在,而不是基类。但它需要State1
和State2
的基类版本,因此您不需要为它们提供自己的实现。