zoukankan      html  css  js  c++  java
  • 设计模式之单例模式C#实现

    前言

    单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式。

    下面是一些个人看法:

    (1) 单例类需要保证自己的唯一性,同时也需要避免被继承,即需要使用sealed修饰;

    (2) 饿汉式单例先创建好实例,懒汉式单例在需要的时候再创建实例,个人倾向于后者,因为单例模式一般管理着特定资源,懒汉式单例可以避免在不需要资源的时候也会创建实例;

    (3) 懒汉式单例需要在多线程环境下保持唯一性,因此需要在创建实例时加锁,对私有实例做双重判空(加锁前、加锁后),避免创建多个实例;

    (4) 对于资源依赖强的单例,需要使用Dispose模式(实现IDisposable接口)。

    1、单例模式UML图

    EA类图

    2、传统单例C#实现

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

    3、演进单例C#实现

    public sealed class Singleton
    {
        private static Singleton _instance;
        private static readonly object LockHelper = new object();
    
        private Singleton()
        {
        }
    
        public static Singleton Instance
        {
            get
            {
                if (_instance != null)
                {
                    return _instance;
                }
    
                lock (LockHelper)
                {
                    _instance = _instance ?? new Singleton();
                }
    
                return _instance;
            }
        }
    }
  • 相关阅读:
    09 python初学 (字符串)
    08 python 初学(字典)
    07 Python初学(元组)
    ubuntu 学习
    10 python 初学(Python 的编码解码)
    12 python 初学(深浅拷贝、集合)
    11 python初学 (文件)
    ubuntu 在 Windows 下的安装
    mysql常用命令总结
    关于Windows 7 下临时IPV6地址的问题,如何禁用它
  • 原文地址:https://www.cnblogs.com/xhubobo/p/11955071.html
Copyright © 2011-2022 走看看