2013-02-17 43 views
2

我正在尝试使用状态模式,并且我有一个问题。仅适用于具有有限数目的状态中的这样situtations设计状态模式:状态模式中的最大状态数

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

或者,它可以在箱子与数百使用例如在员工考勤系统中的员工,其中员工将具有多个组件的组合状态,例如他在他的余额中的年度休假数,他本月应该补偿的小时数,代表他的小时工资率的状态取决于本月的工作量等等,每个员工可以拥有最终被认为是一个国家w的多个属性的组合有一定的行为。

在这种情况下会出现状态对象,这是正确的事情吗?你将如何管理状态对象的命名?如果例如三分之一的州份为某种方法分享某种行为,并且另一个季度分享另一种特定方法的行为,那么你会做什么,即不是所有州在所有方法中都具有独特的行为。我不认为复制实现并将其粘贴到具有相同行为的所有状态中,这种常见方法将是明智的!

非常感谢。

+1

通常情况下,我认为如果您可以使用您提到的变量定义有限数量的状态,则可以使用状态模式。 '工资范围1/2/3','补偿时间多于或少于8小时'等等。但是最好先解释一下你想建立什么软件的原因,以及为什么你考虑使用国家模式首先。 – 2013-02-17 11:14:43

+0

该系统是一个许可证管理系统,授予用户访问特定位置的访问卡。许可证将具有若干个属性,这些属性在组合在一起时将形成强制某些行为的状态,这就是为什么我选择了状态模式。该许可证将有一个国家atrribute(由6个变体组成)和StoppedState属性(由3个变体形成)以及一个IsPrinted属性,用于指示是否打印许可证。谢谢 – Sisyphus 2013-02-17 11:56:40

+0

[别管我以前的评论;删除它]从你上面写的看来,不同国家的数量已经有限(6加3)。事实上,当前活动状态是基于本身具有无限(或非常大)数量的可能值的参数来选择的,并不意味着它的状态数目不受限制。 – 2013-02-17 12:14:59

回答

0

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

需要注意的是一个“国家”,如赋值的组合是不一样的“国家”的状态模式类,这是一组抽象方法的实现。如果你问我一个误称,在这种模式中,'国家'最好称为'行为'。

如果你可以在一个有限的'状态'类中捕捉行为(即,如果它可以用有限数量的代码行构建,那么可能是),那么你可以应用状态模式。正如你已经提到的,你可以多次应用状态模式,通过保持多个活动状态。