设计模式学习笔记-单例模式

一、概述

      保证一个类仅有一个实例,并提供一个访问它的全局访问点。

二、模式中的角色

      Singleton:定义一个Instance操作,允许客户访问它的唯一实例,Instance是一个类操作;可能负责创建它自己的唯一实例;

三、UML类图

四、代码实现

     4.1 双重锁定

    /// <summary>
    /// 双重锁定
    /// </summary>
    public class Signleton
    {
        private static Signleton instance;

        private static readonly object _object = new object();

        private Signleton() { }

        /// <summary>
        /// 提供一个全局访问点
        /// </summary>
        /// <returns></returns>
        public static Signleton GetInstance()
        {
            if (instance == null)
            {
                lock (_object)
                {
                    if (instance == null)
                    {
                        instance = new Signleton();
                    }
                }
            }
            return instance;
        }

     4.2 静态初始化

    /// <summary>
    /// 静态初始化,密封类,以免被继承产生更多的实例
    /// </summary>
    public sealed class Signleton
    {
        private static readonly Signleton instance = new Signleton();

        private Signleton() { }

        /// <summary>
        /// 提供一个全局访问点
        /// </summary>
        /// <returns></returns>
        public static Signleton GetInstance()
        {
            return instance;
        }
    }

五、应用场景

     5.1 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

     5.2 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时;

 

参考书籍《设计模式-可复用面向对象软件的基础》

 

posted @ 2017-04-04 23:47 Rich.W 阅读(...) 评论(...) 编辑 收藏