设计模式——单例(Unity3D中的应用)
来源:互联网 发布:高通一键开启写号端口 编辑:程序博客网 时间:2024/06/07 05:06
单例模式在U3D开发中使用比较频繁,它所解决的问题就是希望一个类型创建一个对象且全局共享(静态公开)(创建一次,多次使用),并且可以 控制类型创建对象的数量(绝大多数时候控制数量为一个) 。
单例用一个词表示那就是唯一。
代码案例:
public class Singleton{ private static Singleton instance; private void Singleton(){} public static Singleton GetInstance() { if(null == instance) instance = new Singleton(); return instance; }}
私有化构造器后,客户端将无法直接new 对象,只能通过Singleton对外公开的GetInstance()方法创建对象,该方法中有判断对象是否存在的,使得Singleton最终只会创建一个实例,但是该方式在多线程中会出现问题。
改进:
public class Singleton{ private static Singleton instance; private static readonly object obj = new object(); private void Singleton(){} public static Singleton GetInstance() { if(null == instance) lock(this) { if(null == instance) instance = new Singleton(); } return instance; }}
在Unity3D中如何实现单例模式:
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> { private static T m_Instance; public static T instance { get { if(null == m_Instance ) { m_Instance = GameObject.FindObjectOfType<MonoSingleton<T>>() as T;//场景中是否在MonoSingleton脚本 if (null == m_Instance) m_Instance = new GameObject (typeof(T).Name).AddComponent<MonoSingleton<T>>() as T;//若不存在,创建空物体添加脚本 } return m_Instance; } } protected virtual void Awake() { if (null == m_Instance) m_Instance = this as T; else Destroy (this.gameObject);//已存在MonoSingle的实例,销毁物体 DontDestroyOnLoad (this);//切换场景时不进行销毁 }}
使用时直接继承 MonoSingleton就可以
public class TestSingleton : MonoSingleton<TestSingleton>{ private TestSingleton(){}//私有化构造器,防止调用者直接new}
提到单例模式,很容易联想到静态类,那他们到底有何区别呢?
静态类和单例差别:
静态类:
1.常驻内存利用空间换时间,快(不需要频繁 开辟空间,装载数据),频繁使用,
2.生命周期由系统控制;
3.约束类中成员都为静态
适合做成工具类(不需要创建多个实例,频繁使用)
静态类一般不存储对象状态 (字段代表对象的状态,对象的不同是字段不同,而方法单独存放一份)
单例:
对象的生命周期可以由程序员控制
管理方便(例:对象池做成单例为了方便管理对象,使用单例,内存中只有一份)
0 0
- 设计模式——单例(Unity3D中的应用)
- 设计模式——工厂(Unity3D中的应用)
- 设计模式——装饰者(Unity3D中的应用)
- 设计模式——适配器(Unity3D中的应用)
- 设计模式——中介者(Unity3d中的应用)
- unity3d中的设计模式之<单例模式>
- Unity3d 中的单例模式
- Unity3d 中的单例模式
- 设计模式——单例模式及jdk中的应用
- 设计模式——状态机(AI)(Unity3D中的应用)
- Unity3d与设计模式(二)单例模式
- Unity3d之设计模式(一)单例模式
- 【设计模式】单例模式(Unity3D/C#)
- Unity3D设计模式之单例模式(1)
- Unity3d之设计模式(一)单例模式
- Unity3d设计模式之单例模式
- Unity3D设计模式之单例模式
- Unity3d设计模式之单例模式
- 【WebService】6.处理Map等CXF无法自动转换的值
- #381 Spiral Matrix II
- 《现代操作系统》读书笔记之进程一
- OC方法和文件编译
- 整数自动转换原则
- 设计模式——单例(Unity3D中的应用)
- 浅析ButterKnife的实现 (二) —— BindResource
- HDU 1338 Game Prediction(田忌赛马)
- ML 工程师需了解的 10 大算法
- 【hibernate】 常见的主键生成策略
- OC创建类
- android ListView 九大重要属性详细分析
- 解析Spring源码(2)---new XmlBeanFactory(new ClassPathResource("..."))
- 转载:中国这10家慕课网站,您需要知道!