单例模式

1、本片文章是保存单例模式的相关介绍用于自身理解,文章内容引自他人博客。

原文点击:

  (1)https://blog.csdn.net/qq_15267341/article/details/54232854?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2

  (2)https://blog.csdn.net/qq_36238093/article/details/89562160

一、单例模式

  1、单例模式介绍:单例模式,简单说就是类的实例在内存中只存在一份;

         1.1、第一种:Unity中继承MonoBehaviour下的单例

                1.1.1、写一个脚本,然后将这个脚本拖放到场景中某个对象身上,千万注意只拖一次到场景中,我们知道,一旦将脚本托给场景中某个对象,就变成脚本组件,组件就是对象,因此这个类的实例在场景中有且只有一个,因此从某种意义上讲场该脚本组件也就是单例的

                1.1.2、访问此种单例的方式有两种 

                      1. 可以通过getComponent方式
                      2 .游戏中,经常为了获取方便,比较易用的方式如下(xuhaitao.instance),使用这种方式要注意三点,在场景中有且只有一个该类的脚本组件

                     3.该脚本组件所依附的对象在场景中必须是激活的,否则会报空指针异常,最后一点是要将instance=this这样代码放在Awake函数中不要放在Start函数中:

using UnityEngine;
 
public class Singleton : MonoBehaviour {
 
    //私有化构造方法,不能new对象,只能通过Singleton.instance的方法得到对象
    private Singleton() { }
 
    public static Singleton instance;  //创建实例对象,
 
    void Awake () {
        instance = this;    //需要在Awake中加入instance = this;
} }

  1.2、C#单例的实现

                1.2.1、饿汉模式

public class Singleton
{
    //很饿,启动时就创建单例对象
    private static Singleton _instance=new Singleton();
    //私有化构造方法,不能new对象,只能通过Singleton.instance的方法得到对象
    private Singleton() { }
    //得到单例对象
    public static Singleton Instance
    {
        get
        {
            return _instance;
        }
    }
 
}

  注:饿汉模式在程序启动的时候就会创建一个Singleton对象,程序运行中,调用Singleton.Instance直接得到一开始创建的对象。

             1.2.2、懒汉模式

public class Singleton
{
    //很懒,启动时不创建单例对象。
    private static Singleton _instance;
    //私有化构造方法,不能new对象,只能通过Singleton.instance的方法得到对象
    private Singleton() { }
    //得到单例对象
    public static Singleton Instance
    {
        get
        {
            //判断_instance是否为空,为空时是第一次调动该方法。创建Singleton对象返回,不为空 
            //说明不是第一次进入。返回上一次创建的对象。当两个线程同时第一次进入这里,会都判断到
            //_instance为空,而创建两个Singleton对象返回。所以时线程不安全的。
            if (_instance== null)
            {
                _instance= new Singleton();
            }
            return _instance;
        }
    }
 
}

  注:懒汉模式在程序启动的时候并不会创建Singleton对象。程序运行中,调用Singleton.Instance会判断_instance是否为空。如果为空,就创建一个返回。如果不为空,说明之前已经创建过了,返回它就完事儿了

原文地址:https://www.cnblogs.com/duoyaduoa/p/12971387.html