首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Unity SKFramework框架(十五)、Singleton 单例

Unity SKFramework框架(十五)、Singleton 单例

作者头像
CoderZ
发布2022-08-29 17:14:23
发布2022-08-29 17:14:23
37500
代码可运行
举报
运行总次数:0
代码可运行

简介

单例通过类型是否继承MonoBehaviour被区分为两种,分别是普通类型单例Singleton和Mono类型单例MonoSingleton

一、普通类型单例

普通类型单例的实现通过继承ISingleton接口并实现其中的OnInit事件,该事件在单例初始化时自动调用。

假设我们有一个类A,它包含一些属性和方法

代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;

public class A
{
    public string StrValue { get; private set; }

    public void Func()
    {
        Debug.Log("Singleton Example.");
    }
}

通过继承ISingleton接口将其作为单例类使用

代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;
using SK.Framework;

public class A : ISingleton
{
    public string StrValue { get; private set; }
    
    public void OnInit() 
    {
        StrValue = "Test";
    }

    public void Func()
    {
        Debug.Log("Singleton Example.");
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
调用示例:
代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;
using SK.Framework;

public class Example : MonoBehaviour
{
    private void Start()
    {
        string s = Singleton<A>.Instance.StrValue;
        Singleton<A>.Instance.Func();
        Debug.Log(s);
    }
}

单例的释放:

代码语言:javascript
代码运行次数:0
运行
复制
//释放单例
Singleton<A>.Dispose();
代码语言:javascript
代码运行次数:0
运行
复制
二、Mono类型单例

Mono类型的单例通过继承IMonoSingleton接口来实现,IsDontDestroyOnLoad属性用于指定该单例物体是否作不销毁处理。

代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;
using SK.Framework;

public class A : MonoBehaviour, IMonoSingleton
{
    public string StrValue { get; private set; }

    public bool IsDontDestroyOnLoad { get { return true; } }

    public void OnInit() 
    {
        StrValue = "Test";
    }

    public void Func()
    {
        Debug.Log("Singleton Example.");
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
调用示例:
代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;
using SK.Framework;

public class Example : MonoBehaviour
{
    private void Start()
    {
        MonoSingleton<A>.Instance.Func();
    }
}

单例的释放:

代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;
using SK.Framework;

public class Example : MonoBehaviour
{
    private void Start()
    {
        MonoSingleton<A>.Instance.Func();
    }
    private void OnDestroy()
    {
        MonoSingleton<A>.Dispose();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 当代野生程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、普通类型单例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档