2

标题几乎概括了它。

我有一个工厂类,当它的create()方法被调用时,它将构造另一个类的实例。我已将我的工厂类设置为单例,这迫使调用看起来像这样:

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

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

如果我的工厂不是单例,我可以设置我的.create()方法 be static,这将获得类似的结果。

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

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

4

1 回答 1

4

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

公开 Singleton 只是您希望它的外观和感觉如何的 API 选择。

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

于 2013-09-24T18:46:27.033 回答