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
  • 相关阅读:
    krdoc 工程
    在ubuntu16.04 上安装php5.6.30
    https自签名 证书签发
    websocket 实现 前端vue-socket.io 服务端 koa2(socket.io)
    工作杂项 0528未 整理
    python 创建django项目;
    关于conda,pip使用杂项:
    笔记 日常
    ubuntu 16.04下 django 1.11.1项目启动问题(kr_doc)
    react-native如何看待 this.setState()
  • 原文地址:https://www.cnblogs.com/session0827/p/5513736.html
Copyright © 2011-2022 走看看