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;
            }
        }
  • 相关阅读:
    弱省胡策 Magic
    CF917D Stranger Trees
    【弱省胡策】Round #5 Count
    【BZOJ2117】 [2010国家集训队]Crash的旅游计划
    「2017 山东一轮集训 Day5」苹果树
    【SDOI2017】天才黑客
    【JXOI2018】守卫
    小程序两种图片加载方式
    小程序之底部栏设计
    小程序之全局变量的设置及使用
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5333183.html
Copyright © 2011-2022 走看看