1.单例模式

发布时间:2024-11-30 16:36

团队建设案例12:京东的‘1+1+N’模式,强调一对一导师指导和多部门协同,提升团队能力。 #生活技巧# #团队建设技巧# #团队建设案例#

最新推荐文章于 2024-03-21 13:40:59 发布

黄小二哥 于 2012-11-07 18:54:00 发布

一、经典模式:

public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton GetInstance() { if(instance==null) { instance=new Singleton(); } return instance; } }

解析如下:

  1)首先,该Singleton的构造函数必须是私有的,以保证客户程序不会通过new()操作产生一个实例,达到实现单例的目的;

  2)因为静态变量的生命周期跟整个应用程序的生命周期是一样的,所以可以定义一个私有的静态全局变量instance来保存该类的唯一实例;

  3)必须提供一个全局函数访问获得该实例,并且在该函数提供控制实例数量的功能,即通过if语句判断instance是否已被实例化,如果没有则可以同new()创建一个实例;否则,直接向客户返回一个实例。

  在这种经典模式下,没有考虑线程并发获取实例问题,即可能出现两个线程同时获取instance实例,且此时其为null时,就会出现两个线程分别创建了instance,违反了单例规则。因此,需对上面代码修改。

二、多线程下的单例模式

  1、Lazy模式

View Code

public class Singleton { private static Singleton instance; private static object _lock=new object(); private Singleton() { } public static Singleton GetInstance() { if(instance==null) { lock(_lock) { if(instance==null) { instance=new Singleton(); } } } return instance; } }

2、饿汉模式

  这种模式的特点是自己主动实例。

View Code

public sealed class Singleton { private static readonly Singleton instance=new Singleton(); private Singleton() { } public static Singleton GetInstance() { return instance; } }

上面使用的readonly关键可以跟static一起使用,用于指定该常量是类别级的,它的初始化交由静态构造函数实现,并可以在运行时编译。在这种模 式下,无需自己解决线程安全性问题,CLR会给我们解决。由此可以看到这个类被加载时,会自动实例化这个类,而不用在第一次调用 GetInstance()后才实例化出唯一的单例对象。

小例子:

在基于 B / S 的应用中, 我们希望有一个全局计数 器来统计在线人数, 为此我们要定义一个计数器类:

public class Counter / / 计数器   { private int intCounter = 0;   private static Counter MyCo unter ; / / 私有 的静 态对 象    public int Count ( )    { intCounter = intCounter + 1;     return intCounter ;    }    public static Counter GetInstance( )    { if ( MyCounter = = null )     { MyCounter = new Counter ( ) ; }    return MyCounter;   } }

调用:Counter.GetInstance().Count()

转载于:https://www.cnblogs.com/baicaocanhua/archive/2012/11/07/2759315.html

网址:1.单例模式 https://www.yuejiaxmz.com/news/view/325741

上一篇:错觉
下一篇:知道你的那天

相关内容

C++设计模式——Singleton单例模式
设计模式之策略模式实例
设计模式生活实例
观察者模式应用场景实例
STM32 ADC配置中连续模式、单次模式以及扫描模式之间的区别以及各自应用场景
中学政治“1+1”高效课堂教学模式研究
【设计模式】状态模式 ( 简介
以生活中的例子快速理解十个设计模式
【设计模式】代理模式
【设计模式】策略模式 ( 简介

随便看看