我读了这些帖子:
我在理解以下创建单例的方式之间的区别时遇到了一些麻烦:
1.工厂构造函数
class SingletonOne {
SingletonOne._privateConstructor();
static final SingletonOne _instance = SingletonOne._privateConstructor();
factory SingletonOne(){
return _instance;
}
}
Run Code Online (Sandbox Code Playgroud)
2.带有吸气剂的静态场
class SingletonTwo {
SingletonTwo._privateConstructor();
static final SingletonTwo _instance = SingletonTwo._privateConstructor();
static SingletonTwo get instance { return _instance;}
}
Run Code Online (Sandbox Code Playgroud)
3.静态场
class SingletonThree {
SingletonThree._privateConstructor();
static final SingletonThree instance = SingletonThree._privateConstructor();
}
Run Code Online (Sandbox Code Playgroud)
这些实例化如下:
SingletonOne one = SingletonOne();
SingletonTwo two = SingletonTwo.instance;
SingletonThree three = SingletonThree.instance;
Run Code Online (Sandbox Code Playgroud)
无需使用工厂构造函数。当new不是可选的时,工厂构造函数很方便,因为它
new MyClass()适用于每次构造函数都返回一个新实例或该类返回一个缓存实例的类。知道实际创建对象的方式和时间不是呼叫者的责任。
我不明白new现在可选是如何使工厂构造函数现在不必要。在您无法做类似SingletonTwo或 …