设计模式之笔记--单例模式(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;
        }
    }

 

posted @ 2016-03-29 15:39  sunny906  阅读(413)  评论(0编辑  收藏  举报