zoukankan      html  css  js  c++  java
  • 设计模式:单件模式

    Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。
    
    1. 单线程时方法
    
    public sealed class Singlton 
    { 
        static Singlton instance = null; 
        Singlton() 
        { } 
      
        public static Singlton Instance 
        { 
            get
            { 
                if (instance == null) 
                { 
                    return new Singlton(); 
                } 
                return instance; 
            }     
        }     
    } 
    这句if (instance == null)不是线程安全的,可能产生多个实例。
    
    2.线程安全的
    public sealed class Singlton 
    { 
        static Singlton instance = null; 
      
        static readonly object o = new object(); 
      
        Singlton() 
        { } 
      
        public static Singlton Instance 
        { 
            get
            { 
                lock (o) 
                { 
                    if (instance == null) 
                    { 
                        return new Singlton(); 
                    } 
                    return instance; 
                } 
            }     
        }     
    } 
    对象实例由最先进入的那个线程创建,后来的线程在进入时(instence == null)为假,不会再去创建对象实例了。但是这种实现方式增加了额外的开销,损失了性能。
    
    3. 双重锁定
     public sealed class Singlton 
    { 
        static Singlton instance = null; 
      
        static readonly object o = new object(); 
      
        Singlton() 
        { } 
      
        public static Singlton Instance 
        { 
            get
            { 
                if (instance == null) 
                { 
                    lock (o) 
                    { 
                        if (instance == null) 
                        { 
                            return new Singlton(); 
                        } 
                    } 
                } 
                return instance; 
            } 
        } 
    } 
    避免了每个 Instance 属性方法的调用中都出现独占锁定。
    
    4. 静态初始化
    public sealed class Singlton 
    { 
        static readonly Singlton instance = new Singlton(); 
      
        static Singlton() 
        { } 
      
        public static Singlton Instance 
        { 
            get
            { 
                return instance; 
            } 
        } 
    } 
    5. 延迟静态初始化
    
     public sealed class Singlton 
    {        
      
        static Singlton() 
        { } 
          
        public static Singlton Instance 
        { 
            get
            { 
                return CreateSinglton.instance; 
            } 
        } 
          
        class CreateSinglton 
        { 
            internal static readonly Singlton instance = new Singlton(); 
          
            static CreateSinglton() { } 
        } 
    } 
  • 相关阅读:
    高德地图在h5项目中的集成(点标记)
    angular中点击页面任意地方让显示的元素消失
    关于echars中雷达图的一些配置
    部署项目到阿里云服务器上遇到的问题
    sql语句的简单记录
    C#中的数据类型
    原型和继承
    Git 命令行使用
    以前一直设置水平居中,现在我们来讨论一下图片居中的四种小技巧
    让盒子两端对齐小技巧 => inline-block
  • 原文地址:https://www.cnblogs.com/profession/p/5073069.html
Copyright © 2011-2022 走看看