单例和其他语言没有区别,需要定义一个静态变量,然后通过方法/属性返回该变量。
需要注意的是尽量使用私有构造方法,避免因为使用了构造函数而导致使用错误。
如果下面这样用:
class ClassA {
static final shared = ClassA();
}
则ClassA.shared
会返回单例,但是当不小心写成ClassA()
时也不会报错,而是会生成新的对象,就可能出现问题。
所以应该使用如下方法进行单例创建:
class ClassA {
static final shared = ClassA._();
ClassA._(); // 如果需要,添加对应代码
factory ClassA() {
return shared;
}
}
这样ClassA.shared
和ClassA()
都会返回相同的单例对象,不会出现问题。