美文网首页
单例模块

单例模块

作者: Qkuang | 来源:发表于2019-12-28 19:53 被阅读0次

IF框架总目录

简介

单例模块是 IF框架中 支持的一种设计模式。简单好用。你只需要继承MonoSingleton<T>,就可以实现一个单例模式,除此之外不需要写一行代码。

IF框架中的单例模块简单使用

该模块就是单例模式的实现。 相信能看这篇文章的人都清楚 设计模式是什么。

单例模式比较简答,直接看 IF框架中 的使用代码吧:

using UnityEngine;
using IFramework;       //引入IF框架的空间
// MonoSingleton<T> 是IF 框架中 定义所有单例的父类。 只要继承它,该类就可以实现单例模式。
public class MySingle:MonoSingleton<MySingle>{
    public void TestFunc(){
        Debug.Log("测试:单例……");
    }
}

public class QkuangSingle : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        MySingle.Instance.TestFunc();
        SingletonPool.Dispose<MySingle>();  //专门用来管理 单例的池子。调用Dispose方法,可以将“MySingle”的单例移除。
    }

}

输出:

image.png

MonoSingletonPath特性——单例可见,管理安心

利用IF 框架实现的单例类型,如果该类型拥有MonoSingletonPath特性,那么会在 创建 实例时被检测出来。同时在Hierarchy 面板中 ,按照对应层级实例化游戏物体。让单例对象 可见!管理更安心!!

代码如下:

using UnityEngine;
using IFramework;       //引入IF框架的空间

[MonoSingletonPath("Qkuang/mySingleGameObject")]
public class MySingle:MonoSingleton<MySingle>{
    public void TestFunc(){
        Debug.Log("测试:单例……");
    }
}
public class QkuangSingle : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       
        MySingle.Instance.TestFunc();
      // SingletonPool.Dispose<MySingle>();  // 为了观察效果,不要删除 单例。
        
    }

}

效果图:

image.png

作者补充——实现状态形单例

单例模式,实现起来很简单。但是不建议 经常使用。提供的全局访问点,有利有弊。同理,设计模式不能乱用,学设计模式重要的是学其中的思维,而非“形式”。

当你决定要实现一个单例模式 时。你是否考虑过 不论是“饱汉”还是“饿汉”单例,第一次 需要判断是否为空,然后构造实例。后面都不需要再判断 为空。否则,除非单例被销毁,否则单例对象一直存在。
其实这就是两个状态的来回切换。

既然有了想法,那么,安排!

 public class Single{
        protected static Single instance;
        protected static Single Stay = new SingleNull();
        protected  virtual  Single Instance{get;} 
        public static Single singleInstance =>Stay.Instance;

    }

    public class SingleNull : Single
    {
        protected override Single Instance {
            get{
                // 未考虑线程安全,如果需要,请自加
                Single.instance = new Single();
                Single.Stay = new SingleValue();
                return Single.instance;
            }
        }
    }

    public class SingleValue : Single
    {
        protected override Single Instance => Single.instance;
    }

什么?没有适用性?安排!

public class Single<T>
    {
        protected static T instance;
        protected static Single<T> Stay = new SingleNull<T>();
        protected virtual T Instance { get; }
        public static T singleInstance => Stay.Instance;
    }
    public sealed class SingleNull<T> : Single<T>
    {
        protected override T Instance
        {
            get
            {
                Console.WriteLine("初始化");
                // 未考虑线程安全,如果需要,请自加
                Single<T>.instance = System.Activator.CreateInstance<T>();
                Single<T>.Stay = new SingleValue<T>();
                return Single<T>.instance;
            }
        }
    }
    public sealed class SingleValue<T> : Single<T>
    {
        protected override T Instance => Single<T>.instance;

    }
    public sealed class AudioManage : Single<AudioManage>
    {
        // 注意这里:由于不调用,就不会实例化。所以本代码是 “饿汉”单例
        public static AudioManage audioInstance = singleInstance;
        public void TestFunc()
        {
            Console.WriteLine("单例测试");
        }
    }

    public class Program
    {
        public static void Main(string[] prag)
        {
                Console.WriteLine("******");
            AudioManage.audioInstance.TestFunc();
                Console.WriteLine("******");

            AudioManage.audioInstance.TestFunc();
        }
    }

如果你想 使用单例,请一定要使用IF框架,因为它使用起来非常不错。

结尾

以上内容是 作者个人的理解,如有错误,欢迎指出。
顺便给出OnClick大佬自己 写的文档地址:003单例模块

如果对 IF框架有其他看法,也欢迎大家 进群交流。

相关文章

  • 单例模块

    和QFramework的单例类似:属于借鉴和个性化QFramework使用起来很简单纯C#版本使用示例 Unity...

  • 单例模块

    IF框架总目录 简介 单例模块是 IF框架中 支持的一种设计模式。简单好用。你只需要继承MonoSingleton...

  • Python--高级第二周

    单例模式 模块中的all pygame

  • 第五章 设计模式

    建议50:利用模块实现单例模式 模块采用的其实是天然的单例模式1 所有的变量都会绑定到模块2 模块只初始化一次3 ...

  • python-高级第二周

    单例模式 异常 模块中的all pygame

  • python单例模式

    python单例模式实现方式 使用模板 python模块是天然的单例模式(.pyc文件的存在) 使用__new__...

  • 前端设计模式

    一、构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例 单例模式单例就是保证一个类只有一个实...

  • python 单例模式

    单例模式 Singleton 网上搜索python 单例模式,实现方式大致有一下几种方式: 以模块导入的方式 使用...

  • 设计模式

    ** 写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。** 单例模式 var P...

  • JacaScript 私有变量(三)模块模式

    模块模式是为单例创建私有变量和特权方法。所谓单例,指的就是只有一个实例对象。按照惯例, JavaScript 是以...

网友评论

      本文标题:单例模块

      本文链接:https://www.haomeiwen.com/subject/klzsoctx.html