java设计模式----单例模式

单例模式保证一个类中只有一个实例且该实例易于外界访问。

懒汉模式(实现了懒加载,不需要同步的情况下效率低)

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

饿汉模式(基于classloder机制避免了多线程的同步问题)

public static class Singleton{
    //在自己内部定义自己的一个实例,只供内部调用
    private static final Singleton instance = new Singleton();
    private Singleton(){
        //do something
    }
    //这里提供了一个供外部访问本class的静态方法,可以直接访问
    public static Singleton getInstance(){
        return instance;
    }
}

 懒汉模式和饿汉模式都是在类初始化即实例化instance

双重锁模式

public static class Singleton{
    private static Singleton instance=null;
    private Singleton(){
        //do something
    }
    public static Singleton getInstance(){
        if(instance==null){
            synchronized(Singleton.class){
                if(null==instance){
                    instance=new Singleton();
                }
            }
        }
        return instance;
    }
}

静态内部类(classloder的机制来保证初始化instance时只有一个线程,只有被调用的时候instance才会初始化,省资源)

public class Singleton {    
        private static class LazyHolder {    
           private static final Singleton INSTANCE = new Singleton();    
        }    
        private Singleton (){}    
        public static final Singleton getInstance() {    
          return LazyHolder.INSTANCE;    
        }    
    }    

枚举

public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}  

它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象  

原文地址:https://www.cnblogs.com/JAYIT/p/5051184.html