java - 通过多对多关系将Enum分组到不同条件的有效设计

标签 java design-patterns enums

在Java中,我使用Enum,然后使用EnumSet将代表类似行为的各种枚举分组。

就像是 :

enum MyConditions {
    condition_A;
    condition_B;
    condition_1;
    condition_100;
    condition_xyz;
    ... more ...

}

EnumSet<MyConditions> group1 = EnumSet.of(condition_A, condition_xyz);
EnumSet<MyConditions> group2 = EnumSet.of(condition_B, condition_xyz);
EnumSet<MyConditions> group3 = EnumSet.of(condition_xyz);
... and many more...


EnumSet不同的原因是我想测试特定条件是否属于组1或组2或组3,依此类推。

感觉设计有点困惑,因为我必须针对不同的条件制作越来越多的EnumSet,并且该设计不支持子分组。例如,组合group1和2以测试父项条件。

我提出的其他建议是在枚举结构本身中提供该组。

就像是 :

enum MyConditions {
    condition_A(group1);
    condition_B(group2);
    condition_1;
    condition_100;
    condition_xyz(group1, group2);
    ... more ...

}


这也不是很好,因为当有多个组时,这会导致Enum的可读性。

Enums是静态数据,对应于第三方API中的某个整数。是的,我想动态创建条件组关系,或者如果我手动定义,则至少比我目前的工作方式更清洁。除了仅查找特定条件是否在特定组中之外,还有多个组可以代表相似条件。例如,如果呼叫者要一个条件,并且该条件不是组1的一部分,而是组2。我们想说“不,它不是组1的一部分,而是组2的一部分”。假设group1和group2被标记为相似。但是,假设有一个独立的group3,并且如果用户询问是否是group3的条件部分,我们只想说“不,它不是group3的一部分”

关于什么是好的设计有什么想法吗?

最佳答案

为了在条件和组之间的关联上具有很大的灵活性和查询服务,您可以为组定义另一个枚举类型,并在类中封装组和条件组之间的映射(如果更方便,也可以采用其他方式):

public class Mapping {
    private final EnumMap<Group, EnumSet<MyConditions>> mappings = 
        new EnumMap<>(Group.class);

    // or

    private EnumMap<MyConditions, EnumSet<Group>> mappingsV2 = 
        new EnumMap<>(MyConditions.class);
}

关于java - 通过多对多关系将Enum分组到不同条件的有效设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665705/

相关文章:

Java 发布和调试属性文件

java - 如何转义所有正则表达式特殊字符但不是一次全部转义(通过 Pattern.quote()),只是一个接一个

c# - 如何首先在 EF 代码中处理一个数据库在多个数据库上下文中使用的一个类?

java - 在从文件(例如 .csv)读取数据行之前,枚举可以变得多复杂?

c - c中枚举的使用

ios - 在数组中查找枚举类型

java - 对 Spring Boot 应用程序使用 AJAX 请求时在 Chrome 中出现 CORS 错误

java - gwt 接口(interface) HostedModeOptions 扩展了超过 1 个类

design-patterns - 不同格式的设计模式

ruby-on-rails - 什么是 DCI,它如何适应 Rails?