博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式(Singleton)
阅读量:6271 次
发布时间:2019-06-22

本文共 1789 字,大约阅读时间需要 5 分钟。

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

单例模式的特点:

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

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

适用性

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

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

///     /// 懒汉式单例模式    /// Summary description for Spooler.    ///     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;            }        }    }    ///     ///饿汉式单例类----静态初始化创建单件,保证了线程安全    ///     public sealed class Singleton    {        private static readonly Singleton singleton = new Singleton();        private Singleton()        {        }        public static Singleton GetInstance()        {            return singleton;        }    }

 

转载于:https://www.cnblogs.com/ctddjyds/p/5889735.html

你可能感兴趣的文章
GIS基础软件及操作(九)
查看>>
10天学安卓-第一天
查看>>
view和activity的区别(转)
查看>>
MySQL的create table as 与 like区别(转)
查看>>
SQLserver 存储过程执行错误记录到表
查看>>
Spring Boot 之 RESRful API 权限控制
查看>>
Redis——常用命令操作
查看>>
UDP 单播、广播和多播
查看>>
windows linux—unix 跨平台通信集成控制系统----系统硬件信息获取
查看>>
ThinkPad E550 安装 WIN7 的启动 U 盘制作
查看>>
在 Windows 下远程桌面连接 Linux - XManager 篇
查看>>
tomcat如何路由映射网址
查看>>
如何开始容器化
查看>>
为什么POLARDB是云计算2.0时代产品进化的关键里程碑?
查看>>
HTTP 协议解析
查看>>
十面埋伏? 程序世界里的不信任原则
查看>>
Use our script to build OGRE, CEGUI, FreeImage, Cg and OIS from CVS
查看>>
姚期智:算法将推动下一波AI浪潮,现有革新将达极限
查看>>
虚拟机设置bios第一启动为u盘
查看>>
Day4---D3:法律问题,合同和电子举证
查看>>