封装一个网络请求单例

dart构造函数文档

使用 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; 
      }));
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,859评论 2 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 此文章是v1.0+时编写,年代久远,小心有毒,谨慎食用!!! 一些重要概念 所有的东西都是对象,所有的对象都是类的...
    soojade阅读 10,113评论 2 27
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,162评论 0 21
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,555评论 0 6