zoukankan      html  css  js  c++  java
  • 设计模式一(单例模式)

    单例模式:所谓单例模式就是确保类只有一个对象,并提供一个公共的访问接口。下面根据概念分析单例模式。

    1、确保一个实例,就是不让程序随处可以new一个对象,这个怎么实现呢?运用私有构造函数。

    public class Singleton
    {
        private Singleton()
        {
    
        }  
    }

    这样Singleton就不能new对象了。

    2、唯一的对象在何处?在内部定义一个静态的Singleton对象,为什么要定义静态的呢,因为静态对象属于类。然后提供一个公共的访问接口即可

    public class Singleton
    {
        private Singleton()
        {
    
        }  
        
        private static Singleton singleton;
        
        public static Singleton GetInstance()
        {
            if(singleton==null)
            {
                singleton=new Singletion();
            }
            
            return singleton;
        }
    }
    单例模式就算完成了,但是这里存在个问题,对于多线程,可能同时存在几个线程同时走到if(singleton==null)这儿,这样就会new出多个singleton实例,这也不能保证其唯一。对于这种多线程的情况,我们可以加进程锁机制,确保在判断这儿只会有一个线程访问,改进如下:
    public class Singleton
    {
        private Singleton()
        {
    
        }  
        
        private static Singleton singleton;
        //线程锁
        private static readonly object lockObj=new object();
    
        public static Singleton GetInstance()
        {
            //双重判断是为了提高性能
            if(singleton==null)
            {
                lock(lockObj)
                {
                    if(singletion==null)
                    {
                        singleton=new Singletion();
                    }
                }
            }
            
            return singleton;
        }
    }
    
    
    
     
    
    
    
    
    test
  • 相关阅读:
    ashx session
    jquery-tmpl中添加js判断
    问题与解决方案
    VS2013打包发布 winform程序
    Sorket通信
    加载页面菜单,原来也可以这么写
    pm2模块编写入门
    使用PouchDB来实现React离线应用
    让fetch也可以timeout
    使用JSON Schema来验证接口数据
  • 原文地址:https://www.cnblogs.com/session0827/p/5513736.html
Copyright © 2011-2022 走看看