某人

此前素未谋面、此后遥遥无期

0%

单例模式

先看文字

单例模式(Singleton Pattern)
保证一个类仅有一个实例,并提供一个访问它的全局访问点

  1. 单例类只能有一个实例;
  2. 单例类必须自己创建自己的唯一实例;
  3. 单例类必须给其所有对象提供这一实例;

主要解决

一个全局使用的类 <=> 频繁的创建于销毁

何时使用

控制实例数目,节省系统资源

关键代码

构造函数是私有的

优点

  1. 在内存里只有有一个实例,减少了内存的开销
  2. 避免资源被多重占用(如写文件操作)

现实场景

  1. 生产一个唯一的产品序列号
  2. 数据库的连接

注意

获取实例中需要使用同步锁,防止多线程同时进入,造成被多次实例化

unity中

有时会看到类似下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using UnityEngine;
using System.Collections;

public class TestMange : MonoBehaviour
{

public static TestMange _instance;

public static TestMange Instance
{
get
{
if (_instance == null)
{
GameObject _obj = new GameObject();
_obj.name = "TestMangeObject";

//对象添加脚本
_instance = _obj.AddComponent<TestMange>();
return _instance;
}
return _instance;
}
}

private void Awake()
{
_instance = this;
}

public void TestToDo()
{
Debug.Log("hello world");
}

}

//如访问
TestMange.Instance.TestToDo();