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

    单例模式就是说系统中对于某类的只能有一个对象,不可能出来第二个。

    static修饰的方法,不能再用abstract修饰,也不能Override。这是因为static方法是属于类的,不会被继承。

    最基本的单例模式不是线程安全的,当有多个线程同时getInstance时,有可能实例化了多个对象。

    下面比较单例模式的几种实现方式的优缺点:

    Hungry模式:

    public class HungrySingleton{
    	
    	static HungrySingleton instance = new HungrySingleton();
    	
    	private HungrySingleton(){
    		
    	}
    
    	public static HungrySingleton getInstance(){
    		return instance;
    	}
    
    }

    这种模式当类被加载时,创建一个实例。当系统中这样的类较多时,会使得启动速度变慢 。现在流行的设计都是讲“延迟加载”,我们可以在第一次使用的时候才初始化第一个该类对象。所以这种适合在小系统。 

    Lazy模式1:

    public class LazySingleton1 {
    	
    	static LazySingleton1 instance;
    	
    	private LazySingleton1(){
    		
    	}
    	
    	public synchronized static LazySingleton1 getInstance(){
    		if(instance == null){
    			instance = new LazySingleton1();
    		}
    		return instance;
    	}
    
    }
    

    上述代码中的一次锁住了一个方法, 这个粒度有点大 ,改进就是只锁住其中的new语句就OK。就是所谓的“双重锁”机制。

    Lazy模式2:

    public class LazySingleton2 {
    	
    	static LazySingleton2 instance;
    	
    	private LazySingleton2(){
    		
    	}
    	
    	public static LazySingleton2 getInstance(){
    		if(instance == null){
    			synchronized (LazySingleton2.class) {
    				if(instance == null){
    					instance = new LazySingleton2();
    				}
    			}
    		}
    		return instance;
    	}
    
    }
    

      

  • 相关阅读:
    boost::ptree;boost::xml_parser
    boost::array
    boost::timer
    boost::gregorian日期
    boost::algorithm/string.hpp
    boost::lexical_cast
    QT::绘图
    QT::透明
    centos上freefilesync与定时任务
    centos上安装freefilesync工具配置说明
  • 原文地址:https://www.cnblogs.com/zcy-backend/p/6719822.html
Copyright © 2011-2022 走看看