zoukankan      html  css  js  c++  java
  • 单例模式

    其实工作中一直在使用单例模式但是一直没留意过,有空简单总结一下。

    单例模式的要点有三个:

      1、是某个类只能有一个实例。

      2、是它必须自行创建这个实例。

      3、是它必须自行向整个系统提供这个实例。

    从具体实现角度来说,就是以下三点:

      1、是单例模式的类只提供私有的构造函数。

      2、是类定义中含有一个该类的静态私有对象。

      3、是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

    举例代码实现:

    最简单直接的单例

    public class Singleton
    {
        private static Singleton instance;
     
        /// <summary>
        /// 构造方法私有,外键不能通过New类实例化此类
        /// </summary>
        private Singleton()
        {
        }
    
        /// <summary>
        /// 此方法是本类实例的唯一全局访问点
        /// </summary>
        /// <returns></returns>
        public static Singleton GetInstance()
        {
            //如实例不存在,则New一个新实例,否则返回已有实例
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }

    多线程安全

    public class Singleton
    {
        private static Singleton instance;
     
        /// <summary>
        /// 程序运行时,创建一个静态只读的进程辅助对象
        /// </summary>
        private static readonly object _object = new object();
     
        /// <summary>
        /// 构造方法私有,外键不能通过New类实例化此类
        /// </summary>
        private Singleton()
        {
        }
        /// <summary>
        /// 此方法是本类实例的唯一全局访问点
        /// (双重加锁 Double-Check Locking)
        /// </summary>
        /// <returns></returns>
        public static Singleton GetInstance()
        {
            //先判断实例是否存在,不存在再加锁处理
            if (instance == null)
            {
                //在同一时刻加了锁的那部分程序只有一个线程可以进入,
                lock (_object)
                {
                    //如实例不存在,则New一个新实例,否则返回已有实例
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
  • 相关阅读:
    AudioStreamer电话打进时崩溃
    ios中NSLog输出格式大全
    IOS Framework制作(一)
    UIButton上的文字添加阴影
    Tim Cook向员工发邮件,祝贺大家实现创纪录的季度
    ios 通讯录“写”操作大全
    AVAudioSession的Category
    IOS播放优酷视频
    iOS 设备的网页调试工具Firebug
    iOS中retain和copy的区别
  • 原文地址:https://www.cnblogs.com/flywing/p/8434316.html
Copyright © 2011-2022 走看看