标题几乎总结了它。
我有一个工厂类,在调用create()
方法时将构造另一个类的实例。我已将我的工厂类设置为单例,这会强制调用如此:
SomeClass clazz = (SomeClass) FactoryClass.getInstance().create(ENUM.TYPE);
这可以保证我的工厂是线程安全的,但可能会导致阻塞等。
如果我的工厂不是单身人士,我可以将我的.create()
方法设为static
,这样可以获得类似的结果。
SomeClass clazz = (SomeClass) FactoryClass.create(ENUM.TYPE);
假设多个线程可能尝试通过FactoryClass创建对象实例,哪个更好?这两种方式都不能提供相同级别的线程安全性吗?
答案 0 :(得分:3)
两者都不会对线程安全产生影响。线程问题存在于create
方法的实现中。静态方法可以创建实例(或获取单例)并调用实例方法,因此实际上没有区别。
公开Singleton只是你想要它的外观和感觉的API选择。
也就是说,静态方法在测试环境中进行模拟更具挑战性,因此可能需要考虑。