设计模式-单例模式

概述

单例模式在软件开发过程中是非常常用的,它提供了一种全局访问的静态方法,提供全局的管理类,和公共访问中心,简单来说就是提供一个唯一的类,然后在程序的任何位置都可以访问到它,它的属性和方法都是共用的,不过就会有这样的一个问题,那给所有属性方法都加上静态字段那是否可以呢,当然也是可以的,不过那得加多少,每个都得加才行,如果属性字段比较多那也不便于维护。

基于MonoBehaviour的最简单实现方式(Demo)

注意点:把这个脚本挂载在任意一个游戏物体上,一定只能有一个!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Singleton : MonoBehaviour
{
    public static Singleton Instance;
    // Start is called before the first frame update
    void Start()
    {
        Instance = this;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

脱离MonoBehaviour的单例

在真实项目开发的时候,项目都是有框架的,框架几乎都是脱离MonoBehaviour的,所以也要学会脱离MonoBehaviour的单例用法

懒汉式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Singleton
{
    private static Singleton singleton;
    public static Singleton Instance
    {
        get
        {
            if (singleton == null)
            {
                singleton = new Singleton();
            }
            return singleton;
        }
    }
}

饱汉式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Singleton
{
    private static Singleton singleton = new Singleton();
    public static Singleton Instance { get { return singleton; } }
}

这种单例的创建方法是懒汉式的,当用到的时候再创建,还有饱汉式的,还没使用的时候就创建,在代码声明的时候就创建对应的实例,或者在静态构造函数中,两个办法主要的区别是在内存的占用中,因为饱汉式的创建,在开始就会为这个静态类分配内存,可能这时候并没有使用到这个类,但是却消耗了内存,造成了内存的浪费懒汉式的创建是在用到这个类的时候再创建,减少了没有使用的时候内存的浪费,但是会多消耗一些性能。总之,没有那种方法是最好的,适合自己项目的才是最重要的,要根据实际需求来。

单例类

当然其实想,为每个单例写一个访问器也比较麻烦,所以可以用一个单例的泛型类来统一这个方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Singleton<T> where T : class, new()//单例父类
{
    private static T singleton;
    public static T Instance
    {
        get
        {
            if (singleton == null)
            {
                singleton = new T();
            }
            return singleton;
        }
    }
}
public class Programmer : Singleton<Programmer>//单例子类
{

}

使用方法,就是直接继承自这个父类,传入自己的类名,别的方法在访问的时候就可以拿到单例类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值