Unity设计模式之单例模式
Unity设计模式之单例模式
定义
单例模式(Singleton)是设计模式中很常见的一种设计模式,目的是为了让一个类在程序运行期间有且仅有一个实例,且方便全局访问。
实现
1、私有的构造函数。
2、含有一个该类的静态私有对象。
3、静态的公有函数或属性,方便用户创建或者获取它本身的静态私有对象。
适用场景
当项目中的某一个对象,在程序运行的过程中,只有一个对象,可以使用单例模式。
例如:资源管理类,日志管理类等,受项目影响比较小,可以多个项目共同使用。
优缺点
优点
1、单例模式只生成一个实例,限制对象数量,减少内存开支和系统性能消耗。
2、使用方便,提供全局访问的函数或属性。
缺点
1、容易为了使用方便造成过度使用的问题,但并不是要求设计者不使用这个模式,而是在仔细设计和特定的前提下,适当使用。
举例
C# 单例
/// <summary>
/// 一个简单的单例
/// </summary>
public class Test
{#region Instanceprivate static Test _Instance;public static Test Instance{get{if (_Instance == null){_Instance = new Test();}return _Instance;}}private Test() { }#endregion
}
Unity mono单例
相比于C#单例,mono单例需要注意的是
1、创建对象的时候,需要创建一个相应的对象,然后将脚本添加。
2、对象Awake的时候,需要判断是否已经创建了对象,如果创建了,需要销毁当前对象。
3、我这里在OnDestroy的时候,把静态变量销毁了,是因为有些逻辑里面可能需要销毁这个对象,重新创建。
using UnityEngine;/// <summary>
/// 一个简单的mono单例
/// </summary>
public class Test : MonoBehaviour
{#region Instanceprivate static Test _Instance;public static Test Instance{get{if (!_Instance){_Instance = GameObject.FindObjectOfType<Test>();if (!_Instance){GameObject obj = new GameObject();_Instance = obj.AddComponent<Test>();}}return _Instance;}}private void Awake(){if (_Instance){Destroy(gameObject);}}private void OnDestroy(){_Instance = null;}#endregion
}
通用mono单例
要做一个通用的mono单例,这里我们需要使用泛型来实现一个基类。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// mono单例
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{protected static T _instance;/// <summary>/// 是否实例化/// </summary>public static bool initialized;public static T Instance{get{if (_instance == null){_instance = FindObjectOfType<T>();if (FindObjectsOfType<T>().Length > 1){return _instance;}if (_instance == null){string name = typeof(T).Name;GameObject obj = GameObject.Find(name);if (obj == null){obj = new GameObject(name);}_instance = obj.AddComponent<T>();DontDestroyOnLoad(obj);}}initialized = true;return _instance;}}protected virtual void Awake(){if (initialized){Destroy(gameObject);}}protected virtual void OnDestroy(){_instance = null;initialized = false;}
}
实现类
using UnityEngine;/// <summary>
/// 一个简单的mono单例
/// </summary>
public class Test : MonoSingleton<Test>
{public void MonoTest() {Debug.Log("test");}
}
尾语
如果有说的不好的地方,欢迎各位大佬批评指正。
Unity设计模式之单例模式相关推荐
- socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- C#设计模式(1)——单例模式
原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
- java单例模式的七种写法_Java设计模式之单例模式的七种写法
什么是单例模式? 单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式.饿汉式单例模式.登记式单例 . 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类 ...
- go设计模式之单例模式
在这里插入图片描述# go设计模式之单例模式 在软件开发时,经常会遇到有些对象需要保证只有一个实例的,那么这种设计模式就应用而生. 定义 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模 ...
- 一篇博客读懂设计模式之---单例模式
一篇博客读懂设计模式之---单例模式 一. 单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...
- Java 设计模式(3)单例模式
前言 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自 ...
- socket可以写成单例嘛_精读设计模式 Singleton 单例模式
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
最新文章
- CV06-Xception笔记
- 带实证明,imshow是能显示数据归一化到0到1的图像的!
- 中国半导体硅片行业未来发展趋势与销售规模预测报告2022版
- 变压器符号_3D动画解析油浸式和干式变压器,看完让你秒懂
- neo4j java label_Neo4j:在具有相同Label的两个或多个节点之间创建关系
- lds天线技术流程图_音箱耳机入门,蓝牙真无线耳机中的LDS天线 「Soomal」
- 工作278:控制数据从字典表获取
- python的特性注定了代码无法保密_python 基础
- 如何利用FL Studio进行听湿录干的声音录制
- 如何将多张二维码合成一个新的动态二维码进行随机扫码
- php极光短信接口接入
- 新印的钞票如何流入市场?
- python 入门总结(一)
- 【随笔】7月休假:粤港澳大湾区旅程记录
- 虚拟空间考古?其实它早在一千年前就存在了 | 浅空间专栏
- 基于深度学习和3D图像处理的精密加工件外观缺陷检测系统
- arduino的C语言基础
- 华为畅享20plus支持鸿蒙系统吗,华为畅享20 plus有nfc吗?畅享20 plus支持红外功能吗?...
- 56岁潘石屹生日当天宣布要学编程语言Python,网友:地产商来抢码农饭碗了!...
- 企业微信管理员账号查看员工客户