单例模式
效果: 单例模式.无论创建多少个实例,都只返回同一个实例. 只暴露你想暴露的公共成员和方法.(此处公共成员为:
instanceVar
,公共方法为instanceFun
)
使用场景:一般是用在系统间各种模式的通信协调上或者在整个系统中只会使用一次的模块中.
dart-单例
准确来说,此单例模式是使用Dart
编写,用 Dart
作为标题更好,不过flutter
跟Dart
是一家,不用分彼此。
import 'package:flutter/material.dart';
class Page extends StatelessWidget {
final num id;
Page3({Key key, this.id}) : super(key: key);
@override
Widget build(BuildContext context) {
// 创建实例
MySingleton myObj1 = MySingleton(); // 返回单例
// 再次创建实例
MySingleton myObj2 = MySingleton(); // 返回单例
print(myObj1 == myObj2); // 比较是否是听一个单例
return Scaffold(body: Text('测试页面'));
}
}
/// 单例模式.无论创建多少个实例,都只返回同一个实例
class MySingleton {
num instanceVar;
static num start;
/// 非静态方法,通过实例创建后使用
instanceFun() {
return start;
}
/// 静态方法,直接通过类方法调用 MySingleton.instanceStaticFun()
static instanceStaticFun() {
return start;
}
/// MySingleton._internal() 在factory构造函数设置 start变量 后仅调用一次。
static final MySingleton _singleton = new MySingleton._internal();
/// 只有使用 static 标识的静态成员,才可以在factory函数中被赋值初始化.
factory MySingleton(num startparam) {
start = startparam;
return _singleton;
}
MySingleton._internal() {
if (instanceVar == null) {
instanceVar = start;
} else {
instanceVar++;
}
}
}
// 无论如何初始化,取到的都是同一个对象
class MySingleton {
static num age;
// 工厂模式
factory MySingleton() =>_getInstance();
static MySingleton get instance => _getInstance();
static MySingleton _instance;
/// MySingleton._internal() 在factory构造函数运行后仅调用一次。
MySingleton._internal() {
// 初始化
}
static MySingleton _getInstance() {
if (_instance == null) {
_instance = new MySingleton._internal();
}
return _instance;
}
/// 非静态方法,通过实例创建后使用
instanceFun() {
return age;
}
}
///调用
// MySingleton manager = new MySingleton();
// MySingleton manager2 = MySingleton.instance;
思考题
优化: 当我们创建单例时,就会立即执行初始化。如何做到创建时不执行初始化,只有使用时才初始化呢?
--------------如果文章对你有用,请右上角点赞/收藏,谢谢-------------