• 面向对象设计模式之Singleton单例模式(创建型)


    动机:在软件系统中,经常有这样的一些特殊的类,必须保证它们在系统中 只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率

    意图:保证一个类仅有一个实例,并提供一个该实例的全局访问点

    UML图:

    示例代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace Singleton
     7 {
     8     /// <summary>
     9     /// 只适用单线程下的单例模式,在多线程下无法保证其唯一实例
    10     /// </summary>
    11     //public class Singleton
    12     //{
    13     //    private static Singleton instance;
    14     //    private Singleton() { }
    15     //    public static Singleton Instance
    16     //    {
    17     //        get 
    18     //        {
    19     //            if (instance == null)
    20     //            {
    21     //                instance = new Singleton();
    22     //            }
    23     //            return instance;
    24     //        }
    25     //    }
    26     //}
    27 
    28 
    29     /// <summary>
    30     /// 第一种:多线程单例模式的设计
    31     /// </summary>
    32     //public class Singleton
    33     //{
    34     //    //volatile 会保证编译器不对代码指令的执行调整顺序,而保证其严格意义上的的按顺序执行
    35     //    private static volatile Singleton instance=null;
    36     //    private static object lockHepler = new object();//起辅助作用
    37     //    private Singleton() { }
    38     //    public static Singleton Instance
    39     //    {
    40     //        get
    41     //        {
    42     //            if (instance==null)
    43     //            {
    44     //                lock (lockHepler)
    45     //                {
    46     //                    if (instance == null)
    47     //                    {
    48     //                        instance = new Singleton();
    49     //                    }
    50     //                }
    51     //            }
    52     //            return instance;
    53     //        }
    54     //    }
    55     //}
    56 
    57     /// <summary>
    58     /// 第二种:多线程单例模式的设计
    59     /// </summary>
    60     public class Singleton
    61     {
    62         public static readonly Singleton Instance = new Singleton();//内联初始化
    63         private Singleton() { }
    64     }
    65 
    66     /// <summary>
    67     /// 第二种实现等同于下面的实现,但这两者的弊端:就是不支持参数化传递的构造器
    68     /// </summary>
    69     //public class Singleton
    70     //{
    71     //    public static readonly Singleton Instance;
    72          
    73     //    //.NET机制会保证只有一个线程执行此82行代码,以加锁的方式防止又一个线程执行
    74     //    //在第一次访问任意静态字段之前,都会执行静态构造器,以保证静态字段都已初始化
    75     //    static Singleton() { Instance = new Singleton(); }
    76     //    private Singleton() { }
    77     //}
    78 
    79 }

    注:本示例代码是本人学习Webcast C#面向对象设计模式纵横谈系列讲座视频时,跟着李建忠老师一步一步的编写的,在此奉献出来,仅供大家参考

  • 相关阅读:
    在Fiddler中捕获IIS / ASP.NET流量
    SQL Server 索引分析开关
    解决谷歌浏览器在F12情况下自动断点问题(Paused in debugger)
    SQL Server 移位运算符
    手动更新了packages.config Nuget配置文件,自动引用dll
    转载:如何严格限制session在30分钟后过期!
    Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows
    Where does Oracle SQL Developer store connections? oracle SQL Developer 连接信息保存的位置,什么地方
    利用 ROW_NUMBER() OVER ( ORDER BY 进行选择性排序,按不同字段进行排序处理,分页
    大数据学习网站
  • 原文地址:https://www.cnblogs.com/yja9010/p/3178779.html
Copyright © 2020-2023  润新知