zoukankan      html  css  js  c++  java
  • 【2016-10-14】【坚持学习】【Day5】【单例模式】

    今天学习第二个模式:单例模式。只允许系统有一个实例运行,提供全局访问该实例的公共方法。

    class Singleton 
    {
        private static Singleton instance=null;  //静态私有成员变量
    
        //私有构造函数
        private Singleton()
        {    
        }
        
        //静态公有工厂方法,返回唯一实例
        public static Singleton GetInstance() 
        {
            if(instance==null)
                instance=new Singleton();    
            return instance;
        }
    }

    饿汉单例:

    class EagerSingleton 
    { 
    private static EagerSingleton instance = new EagerSingleton(); 
    private EagerSingleton() { } 
    public static EagerSingleton GetInstance() 
    {
    return instance; 
    }
    }

    懒汉单例+双重保险

    class LazySingleton 
    { 
    private static LazySingleton instance = null; 
    //程序运行时创建一个静态只读的辅助对象
    private static readonly object syncRoot = new object();
    private LazySingleton() { } 
    public static LazySingleton GetInstance() 
    { 
          //第一重判断,先判断实例是否存在,不存在再加锁处理
    if (instance == null) 
    {
        //加锁的程序在某一时刻只允许一个线程访问
    lock(syncRoot)
    {
        //第二重判断
        if(instance==null)
        {
            instance = new LazySingleton();  //创建单例实例
    }
    }
    }
    return instance; 
    }
    }

    作者:zscmj
    出处:http://www.cnblogs.com/zscmj/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    perl中的默认变量与Z/map介绍
    perl6中字符串字母编历
    将数字转化为特殊符号的密码
    vue: axios
    vue: alias
    background-size
    问题:当浏览器窗口变化时,内容的大小以及相对位置也要相应变化
    vue移动端适配
    Web 端屏幕适配方案
    vue: register and import
  • 原文地址:https://www.cnblogs.com/zscmj/p/5962245.html
Copyright © 2011-2022 走看看