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

    单例模式基类模块

    单例模式 -- 一种创建型模式,一个类负责创建自己的实例,且同时确保只有单个实例可以被创建
      -- 对外提供一个访问该实例的方式

    Unity中单例模式的坑 -- 不能通过构造函数实现
      https://blog.csdn.net/younglady2015/article/details/82752851

    Unity官方的建议:Avoid using the constructor. Never initialize any values in the constructor. Instead use Awake or Start for this purpose.
      没必要在继承自MonoBehaviour类的构造函数中写任何代码。
    解释:无法预计何时会调用构造函数

    单例模式的多种实现方法:https://www.jianshu.com/p/3ffabd9ecd29

    官方推荐实现方法:

    public class Singleton : MonoBehaviour
    {
        public static Singleton instance;
        private Singleton();
        void Awake()
        {
            instance = this;
        }
        public static GetInstance()
        {
            return instance;
        }
    }

    教程中实现方法:

    惰性加载 Lazy-Loading;不是线程安全的,没有synchronized加锁(解释:小游戏开发中基本上不会用到多线程,若有多线程则需加双锁)

    public class Singleton
    {
        private static Singleton instance;
        public static Singleton GetInstance()
        {
            if(instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }

    单例模式基类 -- 每一个类的单例模式实现代码都是相似的,使用单例模式基类可以减少重复代码的书写

    public class SingletonBase<T> where : new ()
    {   // where关键字给泛型T做限定:有一个无参构造函数new ()
        private static T instance;
        public static T GetInstance()
        {
            if(instance == null)
            {
                instance = new T();
            }
            return instance;
        }
    }
    
    public class Singleton : SingletonBase<Singleton>
    {
    }

     

     

     

     

     

     

  • 相关阅读:
    PHP操作数据库
    ANE打包
    我的C++笔记(数据的共享与保护)
    js 正计时和倒计时
    JAVA 日期 一个时间段总共几周,每一天星期几
    mybatis 处理in
    freemarker
    正则手机验证,身份证验证
    签到
    spring定时器
  • 原文地址:https://www.cnblogs.com/FudgeBear/p/12873467.html
Copyright © 2011-2022 走看看