使用 factory 来定义 一个工厂构造函数
它返回一个该类的实例,但是这个实例可以不是新的。比如返回的实例可以从静态属性中取到。
首先需要获得一个实例
1. 我们可以在工厂构造函数中调用该类的一个具名构造函数产生一个新的实例。
2. 紧接着将实例存在该类的静态属性中。
3. 然后返回这个实例。
再次获得旧的实例
1. 现在需要对工厂构造函数做一些改变。
2. 首先工厂构造函数入口处做判断,判断是否有缓存(已经生成过该类的实例)。
3. 如果没有缓存,则走 [首先需要获得一个实例]。
4. 如果有缓存,则将缓存返回。
以上,就提供了封装单例的办法。
class DioUtil {
static final DioUtil _instance = DioUtil._internal();
Dio dio;
factory DioUtil() => _instance;
DioUtil._internal() {
if (null == dio) {
dio = new Dio(options);
dio.interceptors
.add(InterceptorsWrapper(onRequest: (RequestOptions options) {
return options;
}, onResponse: (Response response) {
return response;
}, onError: (DioError e) {
return e;
}));
}
}
}