首页 Flutter 设计模式单例模式
文章
取消

Flutter 设计模式单例模式

单例模式定义

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

单例模式由来

当我们有一些昂贵的资源或者唯一性的资源,构建成本高或者不允许被复制的情况下,需要利用语言特性来保证对象实例的唯一性。而且这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的由来。

单例模式结构

  • Singleton: 单例

    类自身负责保存它的唯一实例,并且它可以提供一个访问该实例的方法

单例模式特点

  • 单例类的构造函数为私有
  • 提供一个自身的静态私有成员变量
  • 提供一个公有的静态工厂方法

单例模式实现

1、创建单例类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Singleton {

   //单例,使用 static 使其可在factory中调用
  static final Singleton _singleton = Singleton._();

  // 方案一: 静态方法暴露唯一实例
  static Singleton getInstance() => _singleton;
  // 方案二: 工厂方法
  factory Singleton() => _singleton;
  // 方案三: 静态属性暴露唯一实例
  static Singleton get instance => _singleton;

  //单例构造方法,需私有
  Singleton._() {
    print("私有构造器,初始化配置/参数");
  }
}

2、使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main(List<String> args) {
  Singleton s = Singleton();
  Singleton s1 = Singleton._singleton;
  Singleton s2 = Singleton.getInstance();
  Singleton s3 = Singleton.instance;
  
  print(s.hashCode);
  print(s1.hashCode);
  print(s2.hashCode);
  print(s3.hashCode);
  print(s == s1);
  print(s1 == s2);
  print(s2 == s3);
}

3、输出结果

1
2
3
4
5
6
7
8
9
10
Connecting to VM Service at http://127.0.0.1:53786/2VA6KIpZV5M=/
私有构造器,初始化配置/参数
516711214
516711214
516711214
516711214
true
true
true
Exited

4、分析

创建单例类我们可以通过三种方式,创建出来的对象都是唯一的实例。

总结

优点

  • 提供了对唯一实例的受控访问,保证一个类仅有一个实例。
  • 在系统内存中值存在一个对象,节约系统资源,对于需要频繁创建和销毁的对象,单例模式可以提高系统的性能

缺点

  • 单例无法抽象,扩展困难
  • 单例类职责过重,一定程度上违背“单一职责原则”
本文由作者按照 CC BY 4.0 进行授权

Flutter 设计模式抽象工厂模式

Flutter 设计模式原型模式