首页 > 其他 > 详细

单例模式

时间:2017-02-19 17:58:38      阅读:156      评论:0      收藏:0      [点我收藏+]

单例模式的介绍

       单例模式是设计模式中常用的设计模式之一,它提供一种创建对象的方式。这种模式仅涉及一个单一的类,该类负责创建自身的对象(下面称对象为实例),同时确保只有一个对象被创建。
      单例模式的应用:windows操作系统的任务管理器只有一个,用户无法打开两个任务管理器窗体;web网站访问量计数器,需要使用单例模式,保证计数准确;多线程文件读写问题,一个文件不能被多个线程同时读写,使用单例模式防止文件读写冲突,每一个线程读写文件必须通过唯一的实例进行操作。
      单例模式实现思路:在内存中只有一个实例,应用单例模式的类的构造函数是私有的,类的对象通过类内的公有方法创建,所以实现单例模式先判断内存中是否已存在类的实例,有则直接返回该实例
       单例模式有多种写法,下面只给出两种方式:双重校验锁和静态内部类。
双重校验锁
/// <summary>
    /// 单例模式的实现
    /// </summary>
    public class Singleton
    {
        // 定义一个静态变量来保存类的实例
        private static Singleton uniqueInstance;
        // 定义一个标识作为线程间同步的标志
        private static readonly object locker = new object();
        // 定义私有构造函数,使外界不能创建该类实例
        private Singleton()
        {
        }

        // 定义公有方法,提供一个全局访问点,供外部访问
        public static Singleton GetInstance()
        {
            // lock方法会消耗计算机性能,使用lock方法前先判断uniqueInstance == null,可以降低性能消耗
            //当第一个线程运行到这里时,此时会对locker对象 "加锁",
            // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁
            // lock语句运行完之后(即线程运行完之后)会对该对象"解锁"
            // 双重锁定只需要一句判断就可以了
            if (uniqueInstance == null)
            {
                lock (locker)
                {
                    // 如果类的实例不存在则创建,否则直接返回已创建的对象
                    if (uniqueInstance == null)
                    {
                        uniqueInstance = new Singleton();
                    }
                }
            }
            return uniqueInstance;
        }
    }

静态内部类

public class Singleton
{
     //静态内部类
     private static class StaticSingleton
     {
      //创建单例模式的实例
      public static Singleton SingletonInside = new Singleton();
      }
     // 定义私有构造函数
     private Singleton(){ }
     public static Singleton GetSingleton()
     {
      return StaticSingleton.SingletonInside;
     }
}

 

 

单例模式

原文:http://www.cnblogs.com/c-djt/p/6416273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!