Factory类的create()方法应该是静态的吗?或制作工厂级单身人士?

时间:2013-09-24 18:40:12

标签: java singleton factory-pattern

标题几乎总结了它。

我有一个工厂类,在调用create()方法时将构造另一个类的实例。我已将我的工厂类设置为单例,这会强制调用如此:

SomeClass clazz = (SomeClass) FactoryClass.getInstance().create(ENUM.TYPE);

这可以保证我的工厂是线程安全的,但可能会导致阻塞等。

如果我的工厂不是单身人士,我可以将我的.create()方法设为static,这样可以获得类似的结果。

SomeClass clazz = (SomeClass) FactoryClass.create(ENUM.TYPE);

假设多个线程可能尝试通过FactoryClass创建对象实例,哪个更好?这两种方式都不能提供相同级别的线程安全性吗?

1 个答案:

答案 0 :(得分:3)

两者都不会对线程安全产生影响。线程问题存在于create方法的实现中。静态方法可以创建实例(或获取单例)并调用实例方法,因此实际上没有区别。

公开Singleton只是你想要它的外观和感觉的API选择。

也就是说,静态方法在测试环境中进行模拟更具挑战性,因此可能需要考虑。