我在我的应用程序中使用了28个州的状态模式,这些州是用于会员卡的,有7个主要州,会员卡有4个布尔属性,实际上会影响它的行为,所以我决定将它们与州一起嵌入,这就是它是如何乘以28个州的。
现在的问题是状态类命名,它变得越来越疯狂,我最终得到了像这个这样的类状态-为了清楚起见,我用连字符连接了不同的属性。
州类名这样可以吗?!我应该怎么做才能获得最佳实践?
发布于 2013-09-08 03:25:04
也许你做得太过分了。我不认为你目前的方法是可维护的,取决于这一切将如何发展,它可能会导致不同状态的爆炸。
关于如何解决这个问题,我有一些想法。您可以使用状态模式实现7个主要状态,并使用标志来跟踪其他条件,因此在每个状态中,您可以基于这些条件编写条件语句。函数中的代码会变得稍微复杂一些,但我相信它仍然会更容易维护。
我没有太多关于状态转换和所有东西的信息,但是另一个想法是有一个单一的状态类,您可以通过传入激活状态所需满足的一组条件来创建anonymous subclasses。
然后,您不必命名任何状态,只需将它们保存在一个集合中,当主对象的任何属性更改可能导致状态更改时,您循环遍历状态集合,您将通过将对象属性与状态条件进行比较来找到新状态。
请注意,您还可以使用HashMap来存储状态,并根据所有条件创建一个散列,以获得惟一的键。这将使状态查找比遍历所有状态查找下一个状态更快。
发布于 2013-09-10 12:30:21
正如plalx评论的那样,按照它的立场,这个设计并不容易维护。正如plalx所建议的,你应该只有7个主要状态。
对于其他4个属性,一种选择是使用装饰器设计模式。这4个属性中的每一个都可以设计为4个装饰器类。根据设置的属性,相应的装饰器对象将包装原始对象。然后,装饰器可以拦截来自客户端的调用,并根据该装饰器的属性修改行为。
https://stackoverflow.com/questions/18676688
复制相似问题