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

      

  • 相关阅读:
    python字符串连接方式(转)
    Python顺序与range和random
    将EXCEL中的列拼接成SQL insert插入语句
    Python OS模块
    Python3.5连接Mysql
    Mysql查看连接端口及版本
    Mysqldb连接Mysql数据库(转)
    Python 文件I/O (转)
    Python 日期和时间(转)
    Python序列的方法(转)
  • 原文地址:https://www.cnblogs.com/zcy-backend/p/6719822.html
Copyright © 2011-2022 走看看