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;
    	}
    
    }
    

      

  • 相关阅读:
    [HAOI2008]硬币购物
    [SCOI2005]骑士精神
    [ZJOI2007]最大半联通子图
    [HAOI2007]反素数
    [SCOI2005]繁忙的都市
    小凯的疑惑
    5月16日vj题解
    周六题目前四题详解
    Codeforces Round #629 (Div. 3)做题记录
    Codeforces Round #570 (Div. 3) B. Equalize Prices
  • 原文地址:https://www.cnblogs.com/silenceshining/p/9108466.html
Copyright © 2011-2022 走看看