先看文字
单例模式(Singleton Pattern)
保证一个类仅有一个实例,并提供一个访问它的全局访问点
- 单例类只能有一个实例;
- 单例类必须自己创建自己的唯一实例;
- 单例类必须给其所有对象提供这一实例;
主要解决
一个全局使用的类 <=> 频繁的创建于销毁
何时使用
控制实例数目,节省系统资源
关键代码
构造函数是私有的
优点
- 在内存里只有有一个实例,减少了内存的开销
- 避免资源被多重占用(如写文件操作)
现实场景
- 生产一个唯一的产品序列号
- 数据库的连接
注意
获取实例中需要使用同步锁,防止多线程同时进入,造成被多次实例化
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();
|