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
  • 相关阅读:
    react脚手架和JSX
    promise
    防抖和节流
    call/apply/bind 用法
    js this指向
    vue单页面应用刷新网页后vuex的state数据丢失的解决方案
    Echarts基础
    继承
    原型链
    vue项目中使用生成动态二维码
  • 原文地址:https://www.cnblogs.com/session0827/p/5513736.html
Copyright © 2011-2022 走看看