zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    0. 引言

    软件开发过程中(尤其对于图形界面来说),经常会遇到单例模式问题,而且还是多线程会同时访问的问题。

    1. 单线程下的单例模式

    如果仅仅是单线程,想必还是很简单的,无需考虑数据共享问题,代码如下:

    public class Singleton
    {
        private static Singleton _instance;
    
        private Singleton()
        {
    
        }
    
        public static Singleton Instance
        {
            get 
            {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
                return _instance;
            }
        }
    }

    2. 多线程下的单例模式

    这种情况下,大部分我们很想到双次检测再加锁的解决办法,代码如下:

    public class Singleton
    {
        private static Singleton _instance;
        private static object _lock = new object();
    
        private Singleton()
        {
    
        }
    
        public static Singleton Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock(_lock)
                    {
                        if (_instance == null)
                        {
                            _instance = new Singleton();
                        }
                    }
                }
                return _instance;
            }
        }
    }

    3. 静态构造函数下的单例模式

    这种办法最方便高效,直接把双次检查加锁的任务交给CLR吧,貌似主流语言目前只有C#支持,代码如下:

    public class Singleton
    {
        private static readonly Singleton _instance = new Singleton();
        public static Singleton Instance
        {
            get
            {
                return _instance;
            }
        }
    }
  • 相关阅读:
    serial number
    python getopt
    python readline,seek
    linux scp
    jenkinsapi
    windows kill process
    python time
    python configparse
    解决某些.net不方便解决的问题,解决方法就是 DHTML
    (转)windows XP 系统服务“关闭”详细列表,释放N多内存,128也够用了!
  • 原文地址:https://www.cnblogs.com/JoshuaMK/p/5997104.html
Copyright © 2011-2022 走看看