假设我们有一个带有私有(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)
可以自行处理 getFoo
和 getBar
所做的所有工作。这表明 getFoo
和 getBar
看起来非常相似。假设除了 foo 和 bar 之外我们还有 30 种以上的颜色,那么我们将为这 30 种以上的颜色提供 30 种以上的 getter。由于 getFoo
和 getBar
看起来很相似,所以其他 30 个 getter 也看起来很相似。这将导致开发人员提出一个问题:我应该重复一遍吗?有一个原则就是不要重复自己(DRY)。尊重“不要重复自己(DRY)”的原则引导我们更喜欢第一种方法,而不是第二种方法。
关于java - 使用枚举的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61489723/