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

设计模式面对面之单例模式

时间:2017-11-08 19:47:48      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:nbsp   image   线程安全   相互   了解   技术分享   none   同步   open   

单例模式

类图:

技术分享技术分享

常用的实现方式:

第一种线程安全

技术分享
    public sealed class Singleton
    {

        public static readonly Singleton SingletonInstance=new Singleton();

        private Singleton()
        {

        }
    }
View Code

 第二种单线程安全

技术分享
 //第二种
    public sealed class SingletonLazy
    {
       
        private static SingletonLazy _singletonInstance;

        private SingletonLazy()
        {

        }

        //单线程,线程安全
        public static SingletonLazy SingletonInstance
        {
            get
            {
                if (_singletonInstance == null)
                {
                    _singletonInstance = new SingletonLazy();
                }

                return _singletonInstance;
            }
           
        }

    }
View Code

第三种线程安全

技术分享
 public sealed class SingletonLazy
    {
       
        private static SingletonLazy _singletonInstance;

        private SingletonLazy()
        {

        }

        //多线程,线程安全
        private static readonly object AsyncObject = new object();
        public static SingletonLazy SingletonInstanceAsync
        {
            get
            {
                if (_singletonInstance == null)
                {
                    lock (AsyncObject)
                    {
                        if (_singletonInstance == null)
                        {
                            _singletonInstance = new SingletonLazy();
                        }
                    }
                    
                }

                return _singletonInstance;
            }

        }
    }
View Code

 使用场景:

当程序要求只有一个对象存在时,会考虑用单例模式。

在使用前需要了解单例模式与静态对象区别:

 功能角度:二者可以相互替换,没什么区别,什么都不考虑的情况用那种方式都行。

 性能:单例对象可以延迟创建 ,优先考虑。

 扩展:单例对象可以实现多态,扩展性好,静态对象不能。

 线程安全:单例对象在多线程时,要考虑线程同步,静态对象不需要。

 在不考虑性能和扩展性的时候优先用静态对象。

单例对象的创建方式:

上面三种实现方式比较常见,当然实现方式很多,根据具体的场景去选择,一般默认第一种,简单方便。

设计模式面对面之单例模式

标签:nbsp   image   线程安全   相互   了解   技术分享   none   同步   open   

原文地址:http://www.cnblogs.com/dujq/p/7804442.html

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