单例模式的学习

单例模式单例模式是一种常见的设计模式。
常见的单例模式:懒汉式单例、饿汉式单例。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

饿汉:因为加载类的时候就创建实例,所以线程安全(多个ClassLoader存在时例外)。缺点是不能延时加载。
懒汉:需要加锁才能实现多线程同步,但是效率会降低。优点是延时加载。

懒汉式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
/***单例模式-懒汉式单例*/
public class EagerSingleton {     
    /**私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象*/
    private static final EagerSingleton m_instance = new EagerSingleton();
    /*** 私有构造方法,避免外部创建实例      */     
    private EagerSingleton() {}
    /*** 静态工厂方法,返回此类的唯一实例.* @return EagerSingleton      */     
    public static EagerSingleton getInstance() {
       return m_instance;     
    }
}


饿汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
public class Singleton{   
    private static Singleton instance=null;   
    /*  
     * 首先单例模式只能存在一个实例  
     * 所以构造函数必须私有  
     */  
    private Singleton(){}   
    /*  
     * 然后外部必须能够访问到一个方法获取这个单例的对象  
     * 因此这个方法必须是共有的静态方法  
     */    
    public synchronized static Singleton getInstance(){   
        if(null == instance){   
            instance=new Singleton();   
        }   
        return instance;   
    }   
}  

你可能感兴趣的:(单例模式)