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;
            }
        }
  • 相关阅读:
    手动制作openstack windows镜像
    kolla-ansible部署多节点OpenStack-Pike
    手动制作openstack CentOS 镜像
    VNC Viewer连接打开remote display的VMware虚拟机出现闪退
    Host does not support domain type kvm for virtualization type 'hvm' arch 'x86_64'
    ImportError: No module named 'requests.packages.urllib3'
    使用kolla安装的openstack mariadb为集群所有节点无法启动
    kolla-ansible部署单节点OpenStack-Pike
    墨刀--在线原型设计工具
    Pycharm配置支持vue语法
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5333183.html
Copyright © 2011-2022 走看看