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

    单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,类的实例都只存在一个(当然也可以不存在),并提供一个访问全局点。

    单例模式的特点:

           单例模式使类在程序生命周期的任何时刻都只有一个实例;

           单例的构造函数是私有的,外部程序如果想要访问这个单例类的话,必须通过请求(GetInstance()等得到这个单例类的实例。

    适用性
          • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
          • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

     很多模式可以使用Singleton模式实现。参见Abstract Factory(3.1)、Builder(3.2),和Prototype(3.4)。Facade模式(称为单例外观);

    /// <summary>
        /// 懒汉式单例模式
        /// Summary description for Spooler.
        /// </summary>
        public class Spooler
        {
            private static bool instance_flag= false;
            private Spooler()
            { instance_flag = true; }
            //简单模式
            public static Spooler getSpooler()
            {
                if (! instance_flag) 
                    return new Spooler ();
                else
                    return null;
            }
            private static Spooler m_instanceSpooler;
            private static readonly object m_objectPadLock = new object();
            public static Spooler InstanceSpooler
            {
                get
                {
                    //并不是线程安全的,在多线程模式下,可能产生第二个实例
                    //return m_instance == null ? new RectangleMethod() : m_instance;
                    //采用双锁定技术
                    if (m_instanceSpooler == null)
                    {
                        lock (m_objectPadLock)
                        {
                            if (m_instanceSpooler == null)
                                m_instanceSpooler = new Spooler();
                        }
                    }
                    return m_instanceSpooler;
                }
            }
        }
        /// <summary>
        ///饿汉式单例类----静态初始化创建单件,保证了线程安全
        /// </summary>
        public sealed class Singleton
        {
            private static readonly Singleton singleton = new Singleton();
            private Singleton()
            {
            }
    
            public static Singleton GetInstance()
            {
                return singleton;
            }
        }
  • 相关阅读:
    Django 之Ajax&Json&CORS&同源策略&Jsonp用法
    Django 基于Ajax & form 简单实现文件上传
    自定义分页
    【学员管理系统】0x04 数据库连接优化
    【学员管理系统】0x03 老师信息管理功能
    【学员管理系统】0x02 学生信息管理功能
    【学员管理系统】0x01 班级信息管理功能
    webpack那些事儿
    前端发展趋势
    好人不一定能做一个优秀的管理者
  • 原文地址:https://www.cnblogs.com/ctddjyds/p/5889735.html
Copyright © 2011-2022 走看看