带Enum的Java工厂模式

时间:2012-10-22 11:34:41

标签: java design-patterns

我必须使用单件工厂模式。 我的工厂类根据枚举类型创建两个不同的对象。

返回正确对象的最佳方法是什么。

解决方案1:通过工厂中的if-else决定:

if(enumType == "objectA") return new objectA()

解决方案2:enum类有一个返回函数:

enum ObjectType{ ObjectA{ .. return new ObjectA()..}}

thx,迈克

2 个答案:

答案 0 :(得分:7)

在枚举上写一个函数。这样,当您添加新枚举时,您不会忘记为工厂方法添加子句。

作为一项规则,对于几乎任何解决方案,我都倾向于对if / else if等序列进行多态和方法实现。它更不容易出错,并且会在编译时捕获问题,而不是运行时。

答案 1 :(得分:0)

如果你只能有一个类的两个实例,我会使用一个枚举,除非它需要另一个类作为超类。