zoukankan      html  css  js  c++  java
  • 设计模式之笔记--单例模式(Singleton)

    单例模式(Singleton)

    定义

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

    类图

    描述

    类Singleton的构造函数的修饰符为private,防止用户使用new创建此类的实例;

    定义一个静态的GetInstance方法,负责创建唯一的实例,并允许用户访问它的唯一实例。

    应用场景

    懒汉模式:第一次调用的时候才产生一个新的实例,并在以后返回此实例。

    非线程安全的单例模式

        public sealed class Singleton
        {
            private static Singleton instance;
    
            /// <summary>
            /// 私有的构造函数
            /// </summary>
            private Singleton()
            {
    
            }
    
            public static Singleton GetInstance()
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }

    线程安全的单例模式,需加线程锁

        public sealed class Singleton
        {
            private static Singleton instance;
            private static readonly object syncFlag = new object();
    
            /// <summary>
            /// 私有的构造函数
            /// </summary>
            private Singleton()
            {
    
            }
    
            public static Singleton GetInstance()
            {
                lock (syncFlag)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
                return instance;
            }
        }

    线程安全的单例模式,双重锁定

        public sealed class Singleton
        {
            private static Singleton instance;
            private static readonly object syncFlag = new object();
    
            /// <summary>
            /// 私有的构造函数
            /// </summary>
            private Singleton()
            {
    
            }
    
            public static Singleton GetInstance()
            {
                if (instance == null)
                {
                    lock (syncFlag)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }

    饿汉模式:在程序开始的时候就会产生一个新的实例,并在以后返回此实例。

    线程安全的单例模式静态初始化

        public sealed class Singleton
        {
            private static readonly Singleton instance = new Singleton();
    
            /// <summary>
            /// 私有的构造函数
            /// </summary>
            private Singleton() 
            { 
    
            }
    
            public static Singleton GetInstance()
            {
                return instance;
            }
        }
  • 相关阅读:
    log4net
    winform datagridview 刷新数据不需要重新绑定
    Git 简明教程(一)
    Task详解【转载】
    虚拟机Linux系统手动指定IP
    DataGrip连接sqlserver,提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
    c#中Equals方法和GetHashCode
    获取程序集的类型信息
    第一个windows桌面应用程序
    在运行时让PropertyGrid动态显示我们想要的对象属性
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5333183.html
Copyright © 2011-2022 走看看