2

我正在尝试使用状态模式,但我有一个问题。状态模式是否仅针对具有以下状态数量的情况而设计:

TCPState:1- TCPEstablished 2- TCPLisenting 3- TCPClosed 等。

或者它可以用于具有数百个状态的情况,例如员工考勤系统中的员工,其中员工将具有多个组件的复合状态,例如他的余额中的年假数,他应该补偿的小时数月,一个状态来表示他的小时工资率取决于本月的工作量等。每个员工可以具有多个属性的组合,最终被认为是具有某种行为的状态。

在这种情况下会有数百个状态对象,这样做正确吗?您将如何管理状态对象命名?以及如果例如三分之一的州对某种方法共享某种行为,而另一季度对某种方法共享另一种行为等,您会怎么做。即并非所有州在所有方法中都具有独特的行为。我不认为复制实现并将其粘贴到对这种通用方法具有相同行为的所有状态中是明智的!

非常感谢。

4

1 回答 1

0

没有定义“状态”类的最大数量,但是如果您为每个“状态”实现一个“状态”类,您可能最终会出现大量代码重复,这本身就是一个问题。

请注意,作为分配值组合的“状态”与状态模式中的“状态”类不同,状态模式是一组抽象方法的实现。如果你问我用词不当,“状态”最好在模式中称为“行为”。

如果您可以在一组有限的“状态”类中捕获行为(即,如果它可以用有限数量的代码行构建,那么可能是的)那么您可以应用状态模式。正如您已经提到的,您可以通过维护多个活动状态来多次应用状态模式。

于 2013-02-18T11:02:09.427 回答