flutter:单例
2020-08-17 本文已影响0人
ChaosHeart
flutter单例 2.0.6以前
class SingletonManager {
// 工厂方法构造函数
factory SingletonManager() => _getInstance();
// instance的getter方法,singletonManager.instance获取对象
static SingletonManager get instance => _getInstance();
// 静态变量_instance,存储唯一对象
static SingletonManager _instance;
// 获取对象
static SingletonManager _getInstance() {
if (_instance == null) {
// 使用私有的构造方法来创建对象
_instance = SingletonManager._internal();
}
return _instance;
}
// 私有的自定义命名式构造方法,通过它实现一个类;
// 子类不能继承internal
// 不是关键字,可定义其他名字
SingletonManager._internal() {
//初始化(设置一些默认的)...
}
//方法
void setGoBack() {
print("object");
}
}
//全局静态变量(取到的都是唯一个)
SingletonManager singletonMager = SingletonManager.instance;
SingletonManager singletonMager = SingletonManager();
单例使用
//单例调用
SingletonManager.instance.setGoBack();
singletonMager.setGoBack()
flutter2.0.6单例
///实例
var singleton = SingletonManager();
///类
class SingletonManager {
// 工厂方法构造函数
factory SingletonManager() => _getInstance();
// instance的getter方法,singletonManager.instance获取对象
static SingletonManager get instance => _getInstance();
// 静态变量_instance,存储唯一对象
static SingletonManager _instance = null;
// 获取对象
static SingletonManager _getInstance() {
if (_instance == null) {
// 使用私有的构造方法来创建对象
_instance = SingletonManager._internal();
}
return _instance;
}
// 私有的命名式构造方法,通过它实现一个类 可以有多个构造函数,
// 子类不能继承internal
// 不是关键字,可定义其他名字
SingletonManager._internal() {
//初始化...
}
///方法
void setGoBack() {
print("object");
}
}
//flutter 2.0 以上单例写法
测试:
///验证内存地址是否一致
SingletonManager s1 = SingletonManager();
SingletonManager s2 = SingletonManager.instance;
SingletonManager s3 = singleton;
print(identical(s1, s2)); // 运行结果:true
print(identical(s1, s3)); // 运行结果:true
print(s1 == s2); // 运行结果:true
print(s1 == s3); // 运行结果:true