zoukankan      html  css  js  c++  java
  • C#设计模式-Singleton Pattern

    一、 单例(Singleton)模式

    单例模式的特点:

    • 单例类只能有一个实例。
    • 单例类必须自己创建自己的唯一实例。
    • 单例类必须给所有其它对象提供这一实例。

    三种实现方式

    1 双重锁定

     1public sealed class Singleton
     2{
     3    static Singleton instance=null;
     4    static readonly object padlock = new object();
     5
     6    Singleton()
     7    {
     8    }

     9
    10    public static Singleton Instance
    11    {
    12        get
    13        {
    14            if (instance==null)
    15            {
    16                lock (padlock)
    17                {
    18                    if (instance==null)
    19                    {
    20                        instance = new Singleton();
    21                    }

    22                }

    23            }

    24            return instance;
    25        }

    26    }

    27}

    28

    这种实现方式对多线程来说是安全的,同时线程不是每次都加锁,只有判断对象实例没有被创建时它才加锁,有了我们上面第一部分的里面的分析,我们知道,加锁后还得再进行对象是否已被创建的判断。它解决了线程并发问题,同时避免在每个 Instance 属性方法的调用中都出现独占锁定。它还允许您将实例化延迟到第一次访问对象时发生。实际上,应用程序很少需要这种类型的实现。大多数情况下我们会用静态初始化。这种方式仍然有很多缺点:无法实现延迟初始化。

    2 静态初始化

     sealed class Singleton
    {
       
    private Singleton();
       
    public static readonly Singleton Instance=new Singleton();
    }

    延迟初始化

     延迟初始化

     1public sealed class Singleton
     2{
     3    Singleton()
     4    {
     5    }

     6
     7    public static Singleton Instance
     8    {
     9        get
    10        {
    11            return Nested.instance;
    12        }

    13    }

    14    
    15    class Nested
    16    {
    17        static Nested()
    18        {
    19        }

    20
    21        internal static readonly Singleton instance = new Singleton();
    22    }

    23}

    24

    这里,初始化工作有Nested类的一个静态成员来完成,这样就实现了延迟初始化,并具有很多的优势,是值得推荐的一种实现方式。

  • 相关阅读:
    [搬运工系列]-JMeter(十三)压力测试--数据库(mysql)压力测试
    [搬运工系列]-JMeter(十二)处理Cookie与Session
    [搬运工系列]-JMeter(十一)问题与方案--内存溢出解决方法
    [搬运工系列]-JMeter(十) 命令行(非GUI)模式
    [搬运工系列]-JMeter (九)分布式测试
    [搬运工系列]-JMeter(八)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
    Python-Selenium 之控制浏览器的操作,WebDriver常用方法
    Selenium常见的无法定位到元素的原因
    接口测试实战
    jmeter做websocket协议的接口测试
  • 原文地址:https://www.cnblogs.com/chhuic/p/1876713.html
Copyright © 2011-2022 走看看