java - 使用枚举的工厂

标签 java enums

假设我们有一个带有私有(private) map 的工厂

clas Factory {
    EnumMap<Color, SomeInterface> map;
    Enum Color {
        FOO,
        BAR
    }
}

并且希望公开获取实现 SomeInterface 的对象的可能性

SomeInterface get(Color color)

或为每种颜色实现单独的方法

SomeInterface getFoo();
SomeInterface getBar();

应该将其实现为单次获取还是乘法?

最佳答案

枚举可以实现接口(interface)。这样你就不需要工厂了。这样你就不需要 map 了。这样你就不需要 getter 方法了。

foo 和 bar 都不是颜色,同样为了枚举颜色,有些人可能会提到,还有比只有两种颜色更多的颜色。 SomeInterface 并不是一个接口(interface)的口头名称。工厂类的构造方法不应命名为get,而应命名为create 或construct。

使用第一种方法还是第二种方法?由于您确实可以在它们之间进行选择,因此看起来 get(Color) 可以自行处理 getFoogetBar 所做的所有工作。这表明 getFoogetBar 看起来非常相似。假设除了 foo 和 bar 之外我们还有 30 种以上的颜色,那么我们将为这 30 种以上的颜色提供 30 种以上的 getter。由于 getFoogetBar 看起来很相似,所以其他 30 个 getter 也看起来很相似。这将导致开发人员提出一个问题:我应该重复一遍吗?有一个原则就是不要重复自己(DRY)。尊重“不要重复自己(DRY)”的原则引导我们更喜欢第一种方法,而不是第二种方法。

关于java - 使用枚举的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61489723/

相关文章:

c# - 具有默认类型转换的枚举?那可能吗?

enums - 空枚举的匹配返回什么?

java - 如何向具体用户发送websocket消息?

java - 如何使用 clojure 的 Gen 类生成静态方法?

java - 如何在竞争条件下将主键值插入表中?

c# - 当从 C# 中的动态获取属性时,如何检查枚举属性?

mysql - 在 mysql 数据库中存储 10 个选项的最佳方法是什么?

java - 如何从 EnumMap 获取数组?

java - IndexOutOfBoundException - 从站点检索所有元素

java - Web 应用程序中的内存泄漏