zoukankan      html  css  js  c++  java
  • 单例模式

    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是否为空。如果为空,就创建一个返回。如果不为空,说明之前已经创建过了,返回它就完事儿了

  • 相关阅读:
    一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(二)用ffmpeg解码音频
    ffmpeg音频播放代码示例-avcodec_decode_audio4
    一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频
    一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例
    Oracle加密表空间进行数据加密的示例
    Oracle TDE的数据加密示例并用logminer验证加密效果
    Oracle登录操作系统验证和密码文件验证
    使用dbms_crypto包加密关键列数据
    使用文件模拟ASM磁盘
    演示save point及自治事务的用处
  • 原文地址:https://www.cnblogs.com/duoyaduoa/p/12971387.html
Copyright © 2011-2022 走看看