单例模式(Singleton Mode):是创建模式的一种。是游戏开发中经常用的模式。甚至可以这样说,单例模式和中介者模式混合使用可以解决小型游戏开发中大部分脚本交互问题,它简约但是不简单。
目录
1. 意图:
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2. 如何使用:
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
优点:1.在内存中只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
2.避免对资源的多重占用。
3.访问非常方便2333.
缺点: 1.没有接口,不能继承,与单一职责原则冲突。一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
何时使用:1.要求生产唯一序列号。
2.创建一个对象需要消耗的资源过多,比如I/O与数据库的连接等。
3. UML模板:
4. 关键代码:
四种单例样式:
1.懒汉单例模式IdierSingleton
2.饿汉单例模式HungrySingleton
3.懒汉多线程下的单例模式ThreadIdierSingleton
4.饿汉多线程下的单例模式ThreadHungrySingleton
所谓懒汉单例就是用到才实例化,但是这样用非常危险。
饿汉单例模式就是在声明的时候就已经初始化了,但是这样会提前占用系统资源。
还要考虑他们在多线程环境下的情况,保证实例化是唯一的,就要使用双向锁定,
readonly,Sealed,lock关键字。我在注释处有完整的笔记。
public class SingletonMode : MonoBehaviour
{
void Start()
{
Debug.Log("当前线程id" + Thread.CurrentThread.ManagedThreadId.ToString());
IdierSingleton s1 = IdierSingleton.GetSingleton();
IdierSingleton s2 = IdierSingleton.GetSingleton();
if (s1 == s2)
{
Debug.Log("两个对象是相同的实例。");
}
HungrySin