设计模式:十二.单例模式

单例模式是游戏开发中常用的创建模式,保证类只有一个实例并提供全局访问点。其优点包括减少内存开销和资源占用,但限制了继承。在多线程环境下,需要使用特定的单例样式如懒汉和饿汉模式,并结合锁机制确保实例唯一。
摘要由CSDN通过智能技术生成

单例模式(Singleton Mode):是创建模式的一种。是游戏开发中经常用的模式。甚至可以这样说,单例模式和中介者模式混合使用可以解决小型游戏开发中大部分脚本交互问题,它简约但是不简单。


目录

1. 意图:

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2. 如何使用:

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

优点:1.在内存中只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
2.避免对资源的多重占用。
3.访问非常方便2333.

缺点: 1.没有接口,不能继承,与单一职责原则冲突。一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

何时使用:1.要求生产唯一序列号。
2.创建一个对象需要消耗的资源过多,比如I/O与数据库的连接等。

3. UML模板:

image

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值