码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式:单件(Singleton)

时间:2015-04-22 23:31:14      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

在构建应用程序时,需要实现唯一实例化对象的类,并提供该实例的全局访问入口,以性能和框架能力为前提,还要考虑线程安全。

单件模式实现方式之一:简单实现,存在线程安全问题

    public sealed class Singleton
    {
        private static Singleton instance;

        private Singleton()
        {
        }

        /// <summary>
        /// 获取单件实体方法
        /// </summary>
        /// <returns>单件实体</returns>
        public static Singleton GetInstance()
        {
            if (instance == null)
            {
                instance = new Singleton();
            }

            return instance;
        }
    }

单件模式实现方式之二:由框架支持的方式,通过static和readonly的组合实现线程安全。微软的单件实现策略之一——静态初始化。

本方式是“设计模式:可重用面向对象软件元素[Gamma95]”的推荐方式,只是利用了C#的语言特性。

    public sealed class Singleton
    {
        private static readonly Singleton instance = new Singleton();

        private Singleton()
        {
        }

        /// <summary>
        /// 获取单件实体方法
        /// </summary>
        /// <returns>单件实体</returns>
        public static Singleton GetInstance()
        {
            return instance;
        }
    }

单件模式实现方式之三:通过标记为同步方法同时只有一个线程能够进入,不过同步操作是非常昂贵的操作,阻塞会导致性能损耗。

    public sealed class Singleton
    {
        private static Singleton instance;

        private Singleton()
        {
        }

        /// <summary>
        /// 获取单件实体方法
        /// </summary>
        /// <returns>单件实体</returns>
        [MethodImpl(MethodImplOptions.Synchronized)]
        public static Singleton GetInstance()
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }

单件模式实现方式之四:多线程的单件实现方式,避免了昂贵的同步操作,双重检查锁定方法避免阻塞和冲突的发生。

    public sealed class Singleton
    {
        private static Singleton instance;
        private static object syncLock = new object();

        private Singleton()
        {
        }

        /// <summary>
        /// 获取单件实体方法
        /// </summary>
        /// <returns>单件实体</returns>
        public static Singleton GetInstance()
        {
            if (instance == null)
            {
                lock (syncLock)
                {
                    if (instance == null) instance = new Singleton();
                }
            }
            return instance;
        }
    }

 参考链接:

Implement Singleton in C# https://msdn.microsoft.com/en-us/library/ff650316.aspx

设计模式:单件(Singleton)

标签:

原文地址:http://www.cnblogs.com/rickc2k/p/4447971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!