• 单例模式(Singleton)


     

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

    实现方法一:  

       class Singleton
        
    //多线程singleton代码
            private static volatile Singleton instance;  
           
    //volatile关键字可防止编译器对所申请的字段优化,以保持字段的最新状态
            private  static readonly object obj = new object();
            
    private Singleton()  //private 禁止外部构造
             { }
            
    public static Singleton Intance
            
    {
                
    get
                
    {
                    
    if (instance == null)  //如果没有实例化则实例化
                     {
                        
    lock (obj)  //锁定obj对象防止多线程访问
                         {
                            
    if (instance == null)  //双检测
                             {
                                instance = 
    new Singleton();
                            }
                        }
                    }
                    
    return instance;
                }
            }        
        }

    实现方法二: 

     1 //通过静态实例实现,非惰性加载
     2 public sealed class Singleton 
     3 
     4    //
    静态初始化在自己被加载时将自己实例例化,也称饿汉式单例类
     5    private static readonly Singleton instance = new Singleton();
     6    private Singleton(){} 
     7    public static Singleton Instance 
     8    { 
     9       get 
    10       { 
    11          return instance; 
    12       } 
    13    } 
    14 

    这种实现简单,线程安全,缺陷主要是instance不是惰性加载的。准确的说是不一定是惰性加载的,因为我们无法得知instance

     public sealed class Moon  //sealed防止被继承子类实例化
     2          {
     3             private static volatile Moon moon;
     4             private static readonly object obj = new object();
     5              private Moon()  //私有防止外部调用
     7              { }
     8             public static Moon GetMoon
    10              {
    11                 get
    12                  {
    13                     if (moon == null)
    14                      {
    15                         lock (obj)
    16                          {
    17                             if (moon == null)
    18                              {
    19                                 moon = new Moon();
    20                             }
    21                         }
    22                     }
    23                     return moon;
    24                 }
    25             }
    26             public void DisplayMoon(Time time)
    28              {
    29                 //根据时间的不同显示不同形状位置的月亮
    30             }
    31             //其它方法
    32         }

  • 相关阅读:
    一篇文章读懂JSON
    不该被忽视的CoreJava细节(四)
    Java面试题总结(二)
    Java面试题总结(一)
    不该被忽视的CoreJava细节(三)
    不该被忽视的CoreJava细节(一)
    逐步解读String类(一)
    JSP注释格式
    命令行启动mysql服务
    经典进程的同步问题之——生产者&&消费者
  • 原文地址:https://www.cnblogs.com/oliver_zh/p/1431838.html
Copyright © 2020-2023  润新知