zoukankan      html  css  js  c++  java
  • 单例模式

     1     //1、线程不安全
     2     //public sealed class Singleton
     3     //{
     4     //    private static Singleton instance; //定义私有的静态全局变量保存改类的唯一实例
     5     //    private Singleton() { }
     6     //    public static Singleton GetInstance()
     7     //    {
     8     //        //如果该类没有被实例化,才去创建改实例
     9     //        return instance ?? (instance=new Singleton());
    10     //    }
    11     //}
    12 
    13 
    14     //2、线程安全
    15     //public sealed class Singleton
    16     //{
    17     //    private static Singleton instance = null;
    18     //    //创建静态只读的进程辅助对象
    19     //    private static readonly object _lock = new object();
    20     //    Singleton() { }
    21     //    public static Singleton GetInstance()
    22     //    {
    23     //        lock (_lock)
    24     //        {
    25     //            return instance ?? (instance = new Singleton());
    26     //        }
    27     //    }
    28     //}
    29 
    30 
    31 
    32     //3、线程安全 双重锁定
    33     //public sealed class Singleton
    34     //{
    35     //    private static Singleton instance;
    36     //    private static object _lock = new object();
    37     //    private Singleton() { }
    38     //    public static Singleton GetInstance()
    39     //    {
    40     //        if (instance == null)//实例为空时,才加锁创建
    41     //        {
    42     //            lock (_lock)//保证只有一个线程可以访问改语句块
    43     //            {
    44     //                    instance = instance ?? (new Singleton());
    45     //            }
    46     //        }
    47     //        return instance;
    48     //    }
    49     //}
    50 
    51 
    52 
    53 
    54     //4、线程安全 静态初始化
    55     //public sealed class Singleton
    56     //{
    57     //    private static Singleton instance = new Singleton();
    58     //    private Singleton() { }
    59     //    public static Singleton GetInstance()
    60     //    {
    61     //        return instance;
    62     //    }
    63     //}
    64 
    65 
    66     //5、延迟初始化,内部类
    67     //public sealed class Singleton
    68     //{
    69     //    private Singleton() { }
    70     //    public static Singleton GetInstance()
    71     //    {
    72     //        return Nested.instance;
    73     //    }
    74     //    //初始化工作放到Nested类中的静态成员来完成
    75     //    private class Nested
    76     //    {
    77     //        static Nested() { }
    78     //        internal static readonly Singleton instance = new Singleton();
    79     //    }
    80     //}
    81 
    82 
    83     //6、延迟初始化,线程安全
    84     public sealed class Singleton
    85     {
    86         private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());
    87         public static Singleton GetInstance()
    88         {
    89             return lazy.Value;
    90         }
    91         private Singleton() { }   
    92     }
  • 相关阅读:
    菜鸟笔记 -- Chapter 6.2.6 内部类
    菜鸟笔记 -- Chapter 6 面向对象
    菜鸟笔记 -- Chapter 6.1 面向对象概述
    菜鸟笔记 -- Chapter 4.7 代码注释与编码规范
    菜鸟笔记 -- Chapter 4 Java语言基础
    小白袍 -- Chapter 1.4.1.1 URL编码的理论解读
    小白袍 -- Chapter 1.1 避不开的编解码
    小白袍 -- Chapter 1 Java中的Encode与Decode
    菜鸟崛起 Ajax
    软件测试
  • 原文地址:https://www.cnblogs.com/oren/p/7445806.html
Copyright © 2011-2022 走看看