我有一个工厂类,我用enum制作了单例。我想确保正在创建的对象也是单例(请注意我不拥有正在创建的类,但我想确保它的对象是单例)。
我正在尝试这样的事情
public enum MyFactoryImpl implements MyFactory {
INSTANCE;
private final MyObject myObject = buildMyObject(); //I want to instance control this
private MyObject buildMyObject() {
return new MyObject();
}
public MyObject myFactoryMethod() {
return this.myObject;
}
}
我尝试使用testNG以并行方式在测试用例中调用factoryMethod,并且多次调用似乎返回相同的hashCode。
@Test(threadPoolSize = 10, invocationCount = 600, timeOut = 100000)
public void test_instanceControlledBehavior() {
final MyFactory f1 = MyFactoryImpl.INSTANCE;
final MyFactory f2 = MyFactoryImpl.INSTANCE;
Assert.assertEquals(f1.myFactoryMethod().hashCode(), f2.myFactoryMethod().hashCode());
}
这是实施行为的正确方法吗?有没有更好的方法可以实例控制' MyObject'?