• 设计模式:单件模式


    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() { } 
        } 
    } 
  • 相关阅读:
    systemd 介绍
    Goland读取配置文件--viper包
    Goland日志记录
    进程查询端口占用
    Python zip() 函数
    Jenkins权限管理(角色权限)
    Django ORM查询总结
    如何查看windows计算机重启记录
    Django ORM迁移
    Django中文乱码解决
  • 原文地址:https://www.cnblogs.com/profession/p/5073069.html
Copyright © 2020-2023  润新知