zoukankan      html  css  js  c++  java
  • 什么是单例模式?单例模式有哪些方式实现?写个例子。

    什么是单例模式?

    我所理解的单例模式:整个程序中只允许有唯一的一个对象(这个类只能实例化一次)

    看看我找到的解释:当一个类只能有一个对象时,往往会用到单例模式,例如,现实生活中有很多临界资源,像 打印机、处理器(单核)、皇帝、太子等等,它们都是稀有资源,只能有一个实例对象。

    单例模式有哪些方式实现?

    第一种最简单,但没有考虑线程安全,在多线程时可能会出问题。(懒单例)

    public class Singleton
    {
        private static Singleton _instance = null;
    
      //1.声明一个私有方法(外部无法调用)
        private Singleton(){}
        //2.声明一个公共的静态的创建上面私有方法(实现外部可以调用到声明的私有的单例方法)
        public static Singleton CreateInstance()
        {  //如果已经存在这个对象了就不要再创建新的,直接返回该对象
    
       //如果这个对象不存在就new一个新的呗
            if(_instance == null)
    
            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }

    第二种考虑了线程安全

    public class Singleton
    {
        private volatile static Singleton _instance = null;
        private static readonly object lockHelper = new object();
        private Singleton(){}
        public static Singleton CreateInstance()
        {
            if(_instance == null)
            {
                lock(lockHelper)
                {
                    if(_instance == null)
                         _instance = new Singleton();
                }
            }
            return _instance;
        }
    }
    class MyClass
        {
            private static MyClass my = new MyClass();
            private MyClass() { }
    
            public static MyClass GetMyClass()
            {
                return my;
            }
        }



    第三种可能是C#这样的高级语言特有的

    public class Singleton
    {
    
        private Singleton(){}
        public static readonly Singleton instance = new Singleton();
    }

      

    写个例子。

    实现方式没有仔细研究,先记个懒单例吧。抽空看看大话设计模式。。。

    好吧,例子已经在上面了。。。

  • 相关阅读:
    人月神话第二遍(总)--读书笔记
    Python实现人脸检测(个人、多人、视频)
    软件体系架构的质量属性
    jdk1.8 使用的是什么垃圾回收器?
    【深入理解Java虚拟机】垃圾回收
    P2167 [SDOI2009]Bill的挑战
    二项式反演基础
    P5039 [SHOI2010]最小生成树
    快速莫比乌斯/沃尔什变换 (FMT/FWT)
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/ooip/p/4808012.html
Copyright © 2011-2022 走看看