博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式_1_单例模式
阅读量:7068 次
发布时间:2019-06-28

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

    单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。  

    应用场景:当系统中需要一个类仅有一个实例时,才需要用到单例(有人会说,那我只实例化一次不就好了吗,如果确定只用一次,并且也不需要考虑扩展,那也是可以的)。但事实上,在很多应用中,会在多个地方用到这个实例,正常的一种解决方案是:在一个公共类中,声明一个静态只读的类空的实例,然后再定义一个静态的方法获取这个实例,在这个方法中判断是否已经存在某个实例。

    但是我认为一个类可以被实例化的次数的控制是这个类本身自己的责任,并且当业务需要可以实例化有限个实例,也将改动那个公共类。所以大师们根据以往的经验,提出了这样的一个单例的设计模式。理解单例模式主要要理解它的应用场景以及类的职能划分。

   下面给了两种单例的实现

   单线程的单例

  

View Code
///     /// 单线程的单例模式    ///     public class Singleton    {        private static Singleton instance;        private Singleton()//阻止类的默认实例化方法        {         }        ///         /// 定义一个获取实例的全局唯一的方法        ///         /// 
public static Singleton GetInstance() { //如果实例不存在,则实例化一个新的实例,否则返回已有的实例 if (instance == null) { instance = new Singleton(); } return instance; } }

   多线程单例

  

View Code
public class Singleton2    {        private static Singleton2 instance;        private static readonly object syncRoot = new object();//用于在运行时创建一个静态只读的进程辅助对象        private Singleton2()         {        }        public static Singleton2 GetInstance()        {            if (instance == null) //如果对象已经存在,刚直接返回实例,否则才进行加锁操作            {                //mark1                lock (syncRoot)                 {                    /*                    可能有两个以上的进程进入mark1的位置,第一个进程加锁,创建实例然后释放锁;                    接着第二个进程加锁进来,如果没有此句的第二次判断实例是否为空,则可能会产生多个实例                    */                    if (instance == null)                     {                        instance = new Singleton2();                    }                }            }            return instance;        }    }

 

转载于:https://www.cnblogs.com/dataadapter/archive/2012/05/16/2502705.html

你可能感兴趣的文章
使用性能计数器统计Exchange 2003收发信情况
查看>>
四、物理优化(7)查看索引使用情况
查看>>
再忆Oracle实例名,服务名等概念区别与联系
查看>>
Cocos2d-x v3.2 详细说明
查看>>
FOSCommentBundle功能包:导入FOSCommentBundle路由
查看>>
高德地图628一元购狂欢节——O2O 不是说说而已
查看>>
Oracle数据库恢复案例
查看>>
微博试水婚庆市场 用意何在?机会几何?
查看>>
深入浅出node.js游戏服务器开发1——基础架构与框架介绍
查看>>
ASP.NET Web API 应用教程(一) ——数据流使用
查看>>
那些年,我们为编程语言的争吵
查看>>
Sysbench 0.5版安装配置
查看>>
“对抗”源自“对等”
查看>>
Lync 小技巧-35-禁用-Exchange Server 2013-用户-邮箱
查看>>
【VMCloud云平台】私有云门户第一朵VM云(四)
查看>>
读书笔记—产品型社群:互联网思维的本质
查看>>
Iptables学习笔记和快速入门手册
查看>>
一起谈.NET技术,关于C# 中的Attribute 特性
查看>>
[转] PHP正则: 判断字符串中是否含有中文
查看>>
Android模拟器上不了网的解决办法
查看>>