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

建设银行纪念币预约网站甘肃门户网

建设银行纪念币预约网站,甘肃门户网,成都企业网站公司,网络工程是冷门专业吗单例模式基类 构造函数私有化,防止外部创建对象 提供一个属性给外部访问,这个属性就相当于是这个类的唯一对象 分为懒汉模式和饿汉模式 不继承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.yayakq.cn/news/893970/

相关文章:

  • 网站开发在线浏览pdf湖南网站建设磐石网络口碑好
  • 齐鲁建设网站温州做网站厉害的公司有哪些
  • 公众号平台注册seo网站诊断分析报告
  • 自助建站源码下载个人自助网站
  • 用自己电脑做网站的空间网站建设的可行性研究的前提
  • 互联壹佰做企业网站免费网站制作新闻
  • 电子商务网站设计的三大原则是中山中小企业网站制作
  • 企业网站推广有哪些方式云南免费网站建设
  • 网站免费建站人生若只初相见04百度搜索热词查询
  • 荥阳做网站推广如何构建一个网站
  • 如何做外贸品牌网站建电影网站
  • 网站建设与制作企业电子商务网站推广计划书
  • 网站建设绿茶品牌推广策略分析
  • 做网站导航的wordpress制作下拉菜单
  • 谷歌英文网站推广领域网站建设
  • 哪里可以学做网站网站开发安全
  • 株洲的网站建设wordpress 评论者邮箱
  • 广州seo网站排名优化网站信息化建设总结
  • 公司网站维护建设费入什么科目深圳最好的营销网站建设公司哪家好
  • 建婚恋网站需要多少钱网站网页?问?
  • 挂机宝怎么做网站网站建设高端培训班
  • 如何创办一个网站eroticalia wordpress
  • 网站各类模块内容说明淘宝网站可以做百度快照吗
  • 网站外链公司在网站做广告怎么做分录
  • 哈尔滨大型网站设计公司东营建设信息网官网首页
  • 男女做爰高清免费视频网站企业邮箱怎么注册
  • 推广策略用英语怎么说网站优化 图片
  • 网站3d展示怎么做婚礼效果图怎么制作
  • 文件下载网站源码东莞哪里可以学网络营销
  • 网站动画效果用什么程序做的免费字体logo设计