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;
            }
        }
    }
  • 相关阅读:
    js代码编写规范
    mysql数据库的水平拆分与垂直拆分
    git使用WebHook实现自动构建
    解决php
    laravel为模型中所有查询统一添加WHERE条件
    centos7+ 安装 php7.2
    nginx配置https
    git常用命令
    php如何应对秒杀抢购高并发思路
    nginx配置优化+负载均衡+动静分离详解
  • 原文地址:https://www.cnblogs.com/xhubobo/p/11955071.html
Copyright © 2011-2022 走看看