设计具有枚举依赖性的类的最佳方法

时间:2013-04-09 14:00:18

标签: java oop class object enums

设计这门课程的最佳方法是什么 Flag类是一个简单的枚举

public enum Flag { ... };

public class Example {
  private final Set<Flag> flags;
  pubilc Example(Set<Flag> flags) {
    this.flags = flags;
  }

 public Set<Flag> getFlags() {
   return ImmutableSet.copyOf(flags);
 }

 public boolean isValid() {
   return flags.contains(Flag.VALID);
 }

 public boolean isRequired() { ... };
}

创建示例对象的一些工厂代码。

Set<Flag> flags = EnumSet.allOf(Flag.class);
Example ex = new Example(flags);

以下哪项是更好的做法:

方法1: 在客户端代码中,我会检查

if (ex.isValid()) { ... };

我在这种方法中看到的缺陷是,如果我添加一个新的Flag,我还必须在Example类中创建一个新的IsX方法,这违反了open close原则?

方法2: 或避免Example类中的所有isX方法,并在客户端中只有这个:

Set<Flag> set = ex.getFlags();
if (set.contains(Flag.VALID)) { ... }

这个缺陷是所有额外的样板代码吗?

1 个答案:

答案 0 :(得分:3)

为什么不这样做:

public boolean isFlagged(Flag flag) {
    return flags.contains(flag);
}

然后你的if-s看起来像:

if(ex.isFlagged(Flag.Valid))