zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    一、拍脑袋想的版本:

    package singleton;
    
    //单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    //此种方式存在线程安全问题。
    public class SimpleSingleton {
    	
    	private static SimpleSingleton instance;
    	
    	//为了保证一个类只有一个实例,那构造函数需要私有化,防止外部随意生成实例。
    	private SimpleSingleton(){}
    	
    	//提供一个全局的访问点  并且是懒加载的
    	public static SimpleSingleton  getInstance(){
    		if(instance==null){
    			instance=new SimpleSingleton();
    		}
    		return instance;
    	}
    
    }
    

      二、线程安全版本(性能存在缺陷)

    package singleton;
    
    public class SafeSingleton {
    	
    	public static SafeSingleton instance;
    	
    	private SafeSingleton(){}
    	//加入synchronized保证线程安全,但存在性能问题,其实只有在第一个生成instance时
    	//才需要加锁保证线程安全,接下来获取instance时并不需要加锁了。
    	public static synchronized SafeSingleton getInstance(){
    		if(instance==null){
    			instance=new SafeSingleton();
    		}
    		return instance;
    	}
    
    }
    

      三、高效且线程安全版本

    package singleton;
    
    public class PerfactSingleton {
    	
    	private volatile static PerfactSingleton instance;
    	private PerfactSingleton(){}
    	public static PerfactSingleton getInstance(){
    		if(instance==null){
    			synchronized (PerfactSingleton.class) {
    				instance=new PerfactSingleton();
    			}
    		}
    		return instance;
    	}
    
    }
    

     四、饿加载方式

    package singleton;
    
    public class EagerSingleton {
    	
    	private static EagerSingleton instance=new EagerSingleton();
    	private EagerSingleton(){}
    	public static EagerSingleton getInstance(){
    		return instance;
    	}
    
    }
    

      

  • 相关阅读:
    Unity文件操作路径
    自定义协议封装包头、包体
    完全卸载删除gitlab
    shell脚本报错:syntax error: unexpected end of file
    Shell脚本创建的文件夹末尾有两个问号怎么回事?
    您与此网站之间建立的连接并非完全安全
    linux 查看磁盘文件大小
    mysql连接问题
    Linux查看当前开放的端口
    本地Linux备份服务器[Client]定期备份云服务器[Server]上的文件(下)
  • 原文地址:https://www.cnblogs.com/silenceshining/p/9108466.html
Copyright © 2011-2022 走看看