zoukankan      html  css  js  c++  java
  • 面向对象设计模式之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#面向对象设计模式纵横谈系列讲座视频时,跟着李建忠老师一步一步的编写的,在此奉献出来,仅供大家参考

  • 相关阅读:
    人生苦短,我用python-- Day8
    人生苦短,我用python-- Day7
    人生苦短,我用python-- Day6 面向对象
    人生苦短,我用python-- Day5
    人生苦短,我用python-- Day4
    人生苦短,我用python-- Day3
    人生苦短,我用python-- Day2
    人生苦短,我用python-- Day1
    小康陪你学JAVA--------三大循环之Do-while循环
    小康陪你学JAVA--------三大循环之For循环
  • 原文地址:https://www.cnblogs.com/yja9010/p/3178779.html
Copyright © 2011-2022 走看看