【设计模式-2】单例模式

优点:

  • 内存在系统运行过程中只有一个实例,减少内存开销。
  • 允许可变数目的实例
  • 其他类通过唯一的全局实例,可以方便访问单例中的方法和变量。
  • 单例可在第一次使用时候,进行实例化,不必在系统刚启动就初始化。一定程度上可以控制自己实例化进程。

缺点:

  • 过多的其他类中通过单例访问全局方法和变量,可能跟其他类造成过度耦合。
  • 没有接口扩展困难
  • 过多的单例,造成性能问题

适用场景:

  1.  资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。 
  2.  控制资源的情况下,方便资源之间的互相通信。如线程池等。 
  3.  需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式

Unity3d中实现单例泛型类方法:

public class UnitySingleton<T> : MonoBehaviour where T:Component {
        private static T _instance;
        public static T GetInstance()        
        {
            if(_instance == null)
            {
                //如果没有类型为T的类对象
                _instance = FindObjectOfType(typeof(T)) as T;
                if(_instance == null)
                {
                    GameObject tempObject = new GameObject ();
                    tempObject.hideFlags = HideFlags.HideAndDontSave;
                    _instance = (T) tempObject.AddComponent(typeof(T));
                    Object.DontDestroyOnLoad(tempObject);
                }
            }
            return _instance;
        }
}

某个类需要单例,继承即可,如下:

public class YourSelfScriptName :UnitySingleton<YourSelfScriptName>

{

}
 

单例模式比静态方法的优点:

从另一个角度考虑,如果一个方法和它所在类的实例对象无关,那么它就应该是静态的,否则就应该是非静态。因此像工具类,一般都是静态的。

扫描二维码关注公众号,回复: 4287301 查看本文章
  1. 单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
  2. 单例可以被延迟初始化,静态类一般在第一次加载是初始化;
  3. 单例类可以被集成,单例里边的方法可以被重写;
  4. 最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活(允许可变数目的实例)

参考:

https://blog.csdn.net/yupu56/article/details/54144262

http://www.manew.com/thread-99522-1-1.html

https://blog.csdn.net/yupu56/article/details/53668688

猜你喜欢

转载自blog.csdn.net/qq_19269527/article/details/84544348