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;
            }
        }
  • 相关阅读:
    常见的行元素与块元素
    [转]SVN服务器部署并实现双机同步及禁止普通用户删除文件
    [转]Axure共享工程Shared Project(二):编辑修改和提交
    如何添加网络打印机
    [转]JSON 转换异常 死循环 There is a cycle in the hierarchy
    比较常用的Properties配置文件的使用方法示例
    解决Tomcat项目重复加载导致pemgen space内存溢出
    怎样批量删除.svn文件
    [转]前端工程师必须掌握的知识点
    Freemarker 使用
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5333183.html
Copyright © 2011-2022 走看看