首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态模式长状态类名称

状态模式长状态类名称
EN

Stack Overflow用户
提问于 2013-09-08 02:48:55
回答 2查看 107关注 0票数 0

我在我的应用程序中使用了28个州的状态模式,这些州是用于会员卡的,有7个主要州,会员卡有4个布尔属性,实际上会影响它的行为,所以我决定将它们与州一起嵌入,这就是它是如何乘以28个州的。

现在的问题是状态类命名,它变得越来越疯狂,我最终得到了像这个这样的类状态-为了清楚起见,我用连字符连接了不同的属性。

州类名这样可以吗?!我应该怎么做才能获得最佳实践?

EN

回答 2

Stack Overflow用户

发布于 2013-09-08 03:25:04

也许你做得太过分了。我不认为你目前的方法是可维护的,取决于这一切将如何发展,它可能会导致不同状态的爆炸。

关于如何解决这个问题,我有一些想法。您可以使用状态模式实现7个主要状态,并使用标志来跟踪其他条件,因此在每个状态中,您可以基于这些条件编写条件语句。函数中的代码会变得稍微复杂一些,但我相信它仍然会更容易维护。

我没有太多关于状态转换和所有东西的信息,但是另一个想法是有一个单一的状态类,您可以通过传入激活状态所需满足的一组条件来创建anonymous subclasses

然后,您不必命名任何状态,只需将它们保存在一个集合中,当主对象的任何属性更改可能导致状态更改时,您循环遍历状态集合,您将通过将对象属性与状态条件进行比较来找到新状态。

请注意,您还可以使用HashMap来存储状态,并根据所有条件创建一个散列,以获得惟一的键。这将使状态查找比遍历所有状态查找下一个状态更快。

票数 0
EN

Stack Overflow用户

发布于 2013-09-10 12:30:21

正如plalx评论的那样,按照它的立场,这个设计并不容易维护。正如plalx所建议的,你应该只有7个主要状态。

对于其他4个属性,一种选择是使用装饰器设计模式。这4个属性中的每一个都可以设计为4个装饰器类。根据设置的属性,相应的装饰器对象将包装原始对象。然后,装饰器可以拦截来自客户端的调用,并根据该装饰器的属性修改行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18676688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档