我正在尝试使用状态模式,我有一个问题。状态模式仅适用于状态数量有限的情景吗?
TCPState:1- TCP建立2- TCPLisenting3- TCP关闭等
或者可以在具有数百个州的情况下使用,例如员工出勤系统中的员工,其中员工将具有多个组成部分的复合状态,例如他的年休假数,应休的小时数补偿本月,根据本月的工作量等来表示他的小时工资率的州。每个雇员可以具有多个属性的组合,这些属性最终被认为是具有某种行为的状态。
在这种情况下,会有成百上千的状态对象,这是正确的做法吗?您将如何管理状态对象的命名?例如,如果三分之一的州共享某种方法的某种行为,而另一四分之一共享某种方法的另一种行为,您将怎么办,即并非所有州都在所有方法中都拥有独特的行为。我不认为将实现复制并粘贴到具有该通用方法相同行为的所有状态中是明智的!
非常感谢。
[状态]类没有定义的最大数量,但是如果为每个“状态”实现一个“状态”类,则可能会导致大量代码重复,这本身就是一个问题。
注意,分配值的组合]中的'状态'与状态模式中的'状态'类不同,状态模式是一组抽象方法的实现。如果您问我一个不当用语,则最好在模式中将“状态”称为“行为”。
如果可以在有限的一组“状态”类中捕获行为(即,如果可以用有限数量的代码行构建行为,那么可能是的,那么您可以应用状态模式。如您已经提到的,您可以通过维持多个活动状态来多次应用状态模式。