您有一个具有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个州有相同的实现,而对第三个州有不同的实现,该怎么办?如何在不重复代码的情况下解决此问题?
附言:当然,这是一个非常简单的例子,但同样的概念将继续下去,比如40个州有7个要实施的操作。
发布于 2013-08-30 22:10:26
将Operation1的定义放在AbstractATMState中,并在State3中覆盖它。
把它放在第2行,然后在第14行放一个不同的实现。当你从State3调用它时,它会使用线性化(如果你想查找它)来获得最合适的版本,它是在它自己的类中的版本,如果它存在的话,而不是基类。但它将采用State1和State2的基类版本,因此您不需要为它们提供自己的实现。
https://stackoverflow.com/questions/18534154
复制相似问题