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;
            }
        }
    }
  • 相关阅读:
    创建支持SSH服务的镜像
    docker网络基础配置
    docker数据管理
    ELK安装笔记
    OpenVAS虚拟机安装
    nslookup命令
    docker仓库操作
    Percona Monitoring and Management (PMM)安装使用
    zabbix2.4.5安装zatree插件
    docker容器操作
  • 原文地址:https://www.cnblogs.com/JoshuaMK/p/5997104.html
Copyright © 2011-2022 走看看