当前位置: 首页 > news >正文

企业网站网站设计seo优化培训公司

企业网站网站设计,seo优化培训公司,walker wordpress,贺州网站建设公司单例模式基类 构造函数私有化,防止外部创建对象 提供一个属性给外部访问,这个属性就相当于是这个类的唯一对象 分为懒汉模式和饿汉模式 不继承MonoBehaviour的单例模式 public static MyUiManager Instance {get{if (instance null){instance new …

单例模式基类

构造函数私有化,防止外部创建对象

提供一个属性给外部访问,这个属性就相当于是这个类的唯一对象

分为懒汉模式和饿汉模式

不继承MonoBehaviour的单例模式

 public static MyUiManager Instance {get{if (instance == null){instance = new MyUiManager();}return instance;}}

继承MonoBehaviour的单例模式

public class MyUiManager : MonoBehaviour
{private MyUiManager() { }private static MyUiManager instance;public static MyUiManager Instance {get{if (instance == null){instance = FindObjectOfType<MyUiManager>();}return instance;}}
}

 instance = FindObjectOfType<MyUiManager>();

 继承  MonoBehaviour  的单例是会挂在游戏场景上的,需要在游戏场景身上寻找到然后赋值

继承与不继承两者初始化的方式不同

继承MonoBehaviour的自动单例模式

if (instance == null){instance = FindObjectOfType<MyUIManager>();//游戏场景中没有创建物体挂在脚本,写代码来自动做这些事情if (instance == null){GameObject go = new GameObject("MyUIManager");  //创建游戏对象instance = go.AddComponent<MyUIManager>();  //挂载脚本到游戏对象身上}}

 继承MonoBehaviour的单例模式切换场景的问题

if (instance == null){GameObject go = new GameObject("MyUIManager");  //创建游戏对象instance = go.AddComponent<MyUIManager>();  //挂载脚本到游戏对象身上}DontDestroyOnLoad(instance);   //让游戏对象切换场景时不销毁

不继承MonoBehaviour的单例模式基类

/// <summary>
/// 不继承MonoBehaviour 的单例模式基类
/// 作用:继承了这个这个类的类自带单例模式
/// </summary>
public class SingletonPatternBase<T> where T: SingletonPatternBase<T>
{private static T instance;public static T Instance{get{if (instance == null){//where 里面要求含有无参构造函数  where T :new()//....单例怎么能有无参构造函数呢//instance = new T();//或者利用反射调用无参构造方法来构造instance = Activator.CreateInstance(typeof(T), true) as T;}return instance;}}//构造方法私有化  private 的话子类也无法继承对象,所以使用protectedprotected SingletonPatternBase() { }}

继承MonoBehaviour的单例模式基类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SingletonMonoAutoBase<T> : MonoBehaviour where T:MonoBehaviour
{protected SingletonMonoAutoBase() { }private static T instance;public static T Instance{get{if (instance == null){instance = FindObjectOfType<T>();if (instance == null){GameObject go = new GameObject(typeof(T).Name);  //创建游戏对象instance = go.AddComponent<T>();  //挂载脚本到游戏对象身上}}return instance;}}
}

继承MonoBehaviour的单例模式基类切换场景问题

OnDestroy方法中访问单例对象的问题

OnDestroy 方法执行的时候资源会清空,instance 检测为空,自动生成新对象,所以报错

解决办法:

    //记录单例对象是否存在,用于防止OnDestory方法中访问单例对象报错
    public static bool isExisted { get; private set; } = false;

protected virtual void OnDestroy()
    {   
        isExisted = false; 
    } 

 多线程访问单例时会遇到的问题

 操作系统  线程锁问题

//线程锁。当多线程访问时,同一时刻只允许一个线程访问private static object locker = new object();//volatile关键字修饰的字段,当多个线程都对它进行修改时,可以确保这个字段在任何时刻呈现的都是最新的值private volatile static T instance;public  static T Instance{get{if (instance == null){lock(locker){if (instance == null){//或者利用反射调用无参构造方法来构造instance = Activator.CreateInstance(typeof(T), true) as T;}}}return instance;}}

http://www.fp688.cn/news/145346.html

相关文章:

  • 平台网站建设制作百度关键词seo
  • 深圳网站建设收费seo黑帽培训骗局
  • 成都设计专业的装修公司引擎seo如何优化
  • 设计师搜图网站百度站长号购买
  • 郑州网站制作公司排名企业营销策划及推广
  • 做企业网站哪里找百度关键词推广可以自己做吗
  • 网站建设捌金手指花总十四优化关键词怎么做
  • 阿里云网站如何建设视频营销策划方案怎么做
  • 你好南京网站免费行情网站的推荐理由
  • 长宁区网站建设网页制品牌推广方式
  • 深圳婚庆网站建设代写文章多少钱
  • 制作网站的过程是对信息的中国最大的企业培训公司
  • 深圳网站建设价格多少做关键词优化的公司
  • 电子商务网站开发技术百度seo如何做
  • 生鲜b2c网站建设规划书深圳高端网站建设公司
  • 盘锦做网站哪家好游戏推广员怎么做
  • 网站上传用什么软件做视频格式外贸网站建站和推广
  • 营销型网站免费模板cfa一级看多久两分钟
  • 高端网站建设公司报价旺道seo营销软件
  • 深信服对单一网站做限速模板建站平台
  • 做医学网站真正免费的网站建站平台推荐
  • 建设厅网站首页sem推广什么意思
  • 男科医院网站建设策略南宁网络推广有限公司
  • 武汉吧嗒科技股份公司惠州百度seo
  • 汕头网站公司免费域名注册查询
  • 如何创建私人网站哈尔滨企业网站模板建站
  • 梅州网站建设公司品牌推广公司
  • 网站做seo第一步深圳品牌seo
  • 医疗网站被黑后可以做排名台州网站建设优化
  • 网站名称 注册百度入口网站