design-patterns - 状态模式中的最大状态数

标签 design-patterns max composite state-pattern

我正在尝试使用状态模式,但我有一个问题。状态模式是否仅适用于状态数量有限的情况:

TCP状态: 1- TCP成立 2- TCPLisenting 3- TCP关闭 等等

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

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

非常感谢。

最佳答案

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

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

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

关于design-patterns - 状态模式中的最大状态数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920366/

相关文章:

c++ - 使用 SSE 的水平最小值和最大值

mysql - 库存管理数据库: definition vs.实例

C++ 类设计为每个不同的行为提供多个接口(interface)

mysql - 使用 max 和 order 进行分组

python pandas - 从面板中识别滚动最大值的行?

asp.net-mvc - 用 ASP.NET MVC 实现 MEF?

python - 对数据对象的依赖注入(inject)

java - 代码重构: Outsourcing substeps to helper classes

java - 可序列化对象的组合也可序列化吗?

c - 在没有运行合成器的情况下使用 x11 协议(protocol)获取覆盖窗口需要什么?