首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现多个条件逻辑的最佳模式

实现多个条件逻辑的最佳模式
EN

Stack Overflow用户
提问于 2016-04-05 22:25:26
回答 1查看 1.2K关注 0票数 1

首先,我阅读并搜索了重构条件逻辑的方法--似乎提出了三种主要方法:多态性(没有尝试过,但认为我无法在这种情况下应用它)、Enum(使用过)和策略模式(我使用过几次并喜欢它)。

然而,我有大约6-7个布尔条件要检查,并且根据每一个条件是否为真/假,我想做一些不同的事情,例如

代码语言:javascript
复制
true, false, false, true

false, false, true, false

true, true, ... you get the picture..

布尔值是由不同的首选项设置的,它们在某种程度上都是相关的,但是我需要根据哪些是真还是假来处理不同的。首选项的数量也很可能增加,所以我想要的是可伸缩和可维护的东西。

我知道我可以在这里使用策略模式,但不是没有很多条件检查(这是我试图避免的)。

例如,该项目以音乐应用程序为中心,具体而言,当一首歌曲完成时,应该做什么,以及什么选项决定接下来会发生什么,即:

随机播放

重复

PLAY_FROM_ALBUM_SONGS

PLAY_FROM_ARTIST

PLAY_FROM_GENRE

PLAY_FROM_ALL_SONGS

因此,一个基本的例子是,第一个和最后一个都是真的(所有歌曲都是假的),而rest则是假的。有些情况下,如果一个是真的,另一个必须是假的--如果你只播放一张专辑,你就不能播放库中的所有歌曲,所以当选择一些选项时,它们会自动更改它们直接影响到的其他歌曲。

任何基于多个条件(6/7+)的条件逻辑的建议都可以重构,这样它就不会看起来像丑陋的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-05 23:45:52

在您的示例中,您应该首先对条件进行分类。有些是排他性的,有些可能是相互影响的,所有这些都可以根据它们指定的行为的哪一部分进行分组。

在您的示例中,分类可能如下所示:

  • 歌曲选择: FROM_ALBUM,FROM_ARTIST,FROM_GENRE,FROM_ALL_SONGS
  • 重复:重复
  • 顺序:洗牌

重复和顺序每个元素只包含一个元素,歌曲选择是基于从左到右的层次结构。如果FROM_ARTIST是真的,那么FROM_ALBUM也是隐式的,因为专辑是艺术家创作的曲目的子集(除非您也计算功能,但我将在这里忽略这一点)。所以在分类之后,事情看起来已经简单得多了。

由于重复和洗牌处理自己的特定行为而不受任何其他标志的影响,我们可以通过一个微不足道的if-子句来处理它们,或者通过将每个属性映射到特定操作的一些变通方法来处理它们。对于其他标志,最简单的方法是利用层次结构,搜索覆盖最大歌曲集的标志,并将其设置为过滤器。

这里的主要技巧不是应用任何设计模式,而是根据其含义对标志进行分类。

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

https://stackoverflow.com/questions/36438165

复制
相关文章

相似问题

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