建模部分枚举

问题描述 投票:0回答:1

假设我有一个名为Specifier的字段,它可以是100个实例之一(此数字将来会增加)。在代码中,我通常只使用其中的一部分进行比较和逻辑。

模拟这种行为的最佳方法是什么?

Specifier s = new Specifier(123);
Specifier s2 = Specifier.KNOWN; //KNOWN == Specifier(123)

//possible comparation should be true since KNOWN can be 123
(s == s2) == true;

在这种情况下,似乎可以将Specifier建模为enum,但是问题是我无法初始化new Specifier()

我还可以在代码中表达所有100个枚举,但是如果数据库中只有一个更改,则需要更新代码并重新编译...

我可以将Specifier内的public static final字段称为KNOWN-这是一个选项,但不确定是否劣于enum方法?

我可以让enum实现一个接口,但这似乎太笨拙。

对此还有其他想法吗?

java oop enums software-design
1个回答
0
投票

似乎该具有flyweight的实现看起来是最好的(因为我也可以使用==而不是equals

public class Specifier {
  private static final Map<String, Specifier> flyweights = new HashMap<>();

  public static final Specifier KNOWN1 = Specifier.of("1");
  public static final Specifier KNOWN2 = Specifier.of("2");
  public static final Specifier KNOWN3 = Specifier.of("3");

  static {
        flyweights.put(KNOWN1.value(), KNOWN1);
        flyweights.put(KNOWN2.value(), KNOWN2);
        flyweights.put(KNOWN3.value(), KNOWN3);
  }

  private final String value;

  public static Specifier of(String value) {
    return flyweights.computeIfAbsent(value, v -> new Specifier(value));
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.