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

      

  • 相关阅读:
    POJ 1182 食物链 +POJ 2492 A Bug's Life 种类并查集
    Codeforces 884C Bertown Subway dfs判环
    HDU 2102 A计划 bfs
    Codeforces Round #442 (Div. 2) 877E
    Codeforces Round #443 (Div. 2) B. Table Tennis
    Codeforces Round #442 (Div. 2) D. Olya and Energy Drinks
    HDU 1495 非常可乐 BFS/数论
    Codeforces Round #442 (Div. 2) B. Nikita and string DP
    51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈
    HDU 1286 找新朋友
  • 原文地址:https://www.cnblogs.com/silenceshining/p/9108466.html
Copyright © 2011-2022 走看看