单例模式

简介:

单例模式:保证一个类只有一个实例,并提供给它一个全局访问点。也就是说实例要么没有,有也只能是一个。

1、最简单的单例模式

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

 

客户端代码

private  static  void  SingleModeTest()
{
     Singleon s1 = Singleon.GetInstance();
     Singleon s2 = Singleon.GetInstance();
     if  (s1 == s2)
     {
         Console.WriteLine( "两个对象实例是相等的" );
     }
}

 

 缺点:在多线程中还是会创建多个实例的。

 

 2、  多线程下解决被多个实例

class  SingleonMultiThread
{
     private  static  SingleonMultiThread instance;
     private  static  readonly  object  syncRoot = new  object ();
 
     private  SingleonMultiThread()
     { }
 
     public  static  SingleonMultiThread GetInstance()
     {
         if  (instance == null )
         {
             lock  (syncRoot)
             {
                 if  (instance == null )
                 {
                     instance = new  SingleonMultiThread();
                 }
             }
         }          
         return  instance;
     }
}

 

 

3、采用静态初始化变量的方法

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

 

    采用静态初始化方法,不需要显示的编写线程安全代码,即可解决多线程环境下不安全问题。第三中方法最好。

 

 

本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/06/17/2552860.html,如需转载请自行联系原作者


目录
相关文章
|
1月前
|
设计模式 安全 测试技术
【C++】—— 单例模式详解
【C++】—— 单例模式详解
|
3月前
|
C++
【C++ 单例模式】
【C++ 单例模式】
|
8月前
|
设计模式 安全 编译器
2023-6-12-第三式单例模式
2023-6-12-第三式单例模式
50 0
|
4月前
|
安全 C++
C++单例模式
C++单例模式
30 1
|
7月前
|
设计模式 安全 Java
单例模式的运用
单例模式的运用
25 0
|
8月前
|
设计模式 Java Spring
什么场景要使用单例模式,什么场景不能使用?
经常有小伙伴问我,设计模式学了这么久,每次看到概念也都能理解。但是,就是不知道怎么用,在哪里能用?我告诉大家,设计模式,不是为了要用而用的,而是作为前人总结下来的经验,等到哪天需要用的时候,你能想起来为你所用。
65 0
|
10月前
|
设计模式 前端开发
关于单例模式我所知道的
关于单例模式我所知道的
44 0
关于单例模式我所知道的
|
设计模式 缓存 JSON
没那么简单的单例模式
没那么简单的单例模式
112 0
没那么简单的单例模式
|
设计模式 数据库 Python
|
XML 设计模式 安全
单例模式,真不简单
单例模式,真不简单
单例模式,真不简单