Dart - 设计模式之单例模式

前言

我们知道, 经典的设计模式有23种,其中,常用的并不是很多,而单例模式肯定是常用的设计模式之一。

今天学习的是,在Dart中各种单例的实现方法,还有就是,搞清楚下面几个问题。

  • 什么是单例模式
  • 为什么要用单例模式
  • 单例模式的实现方法

什么是单例模式

单例模式的定义很简单,一个类只允许创建一个对象/实例,那么这个类就是一个单例类,这种设计模式就叫做单例设计模式,简称单例模式。

为什么要用单例模式

  • 该类全局唯一

从一个实际业务来讲,比如说用户信息类,在正常的业务逻辑下,App 运行期间,登录的用户有且仅有一个,那么用户信息类就应该使用单例模式。

  • 处理资源访问冲突

这个是针对多线程环境下会出现这个问题,在 Dart 单线程环境下自然没有这个问题。

Dart 中单例实现方法

单例模式分饿汉式和懒汉式,这两者的区别是,饿汉式在类加载的时候,instance 静态实例已经创建并初始化好了,懒汉式是在类第一次使用的时候,再去实例化这个类,也就是延迟加载。

懒汉式的单例模式

class UserInfo {
  UserInfo._();

  static UserInfo get instance => _getInstance();
  static UserInfo? _instance;

  static UserInfo _getInstance() {
    _instance ??= UserInfo._();
    return _instance!;
  }
  
  String? name;
  String? avatar;
} 

饿汉式的单例模式

class UserInfo {
  UserInfo._();

  static final UserInfo _instance = UserInfo._();

  static UserInfo get instance => _instance;

  String? name;
  String? avatar;
} 

在 Dart 中,有个关键词是factoryfactory的定义是用来修饰构造函数时,并不总是创建一个新的该类的对象,比如它可能会从缓存中返回一个已有的实例,或者是返回子类的实例。

factory来修饰构造函数,也可以实现单例模式。这种方式实现就没有必要私有构造函数

class UserInfo {

  factory UserInfo() => _instance;

  UserInfo._internal();
  
  static final UserInfo _instance = UserInfo._internal();
} 

你可能感兴趣的:(设计模式,单例模式)