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类的一个静态成员来完成,这样就实现了延迟初始化,并具有很多的优势,是值得推荐的一种实现方式。

  • 相关阅读:
    egrep及扩展正则
    grep命令及正则
    Linux管道及I/O重定向
    权限及权限管理
    Linux-用户管理
    Linux用户及权限
    文件名通配
    bash特性-命令历史命令行编辑
    USACO 2014 US Open Decorating The Pastures
    USACO 2014 US Open Odometer /// 枚举
  • 原文地址:https://www.cnblogs.com/chhuic/p/1876713.html
Copyright © 2011-2022 走看看