简述:单例指一个类只允许拥有一个对象,而且这个对象是它自己进行实例化然后向整个系统提供出来,这样我们把它称为单例类。

结构和特点:只有一个实例;这个实例必须自己创建;为其他的所有对象提供这个实例;

使用场景:计数器、加载配置文件信息的类

饿汉式:


package com.firefly.singleton;

public class EagerSingleton {

private static EagerSingleton es = new EagerSingleton();



private EagerSingleton(){

    System.out.println(" eager singleton");

}



public static EagerSingleton getInstance(){

    return es;

}

}


懒汉式:


package com.firefly.singleton;

public class LazySingleton {

private static LazySingleton ls = null;



private LazySingleton(){

    System.out.println(" lazy singleton");

}



public static synchronized LazySingleton getInstence(){

    if(ls == null){

        ls = new LazySingleton();

    }

    return ls;

}

}


枚举式:


package com.firefly.singleton;

public enum Single{

uniqueInstence;



public void singleOperation(){

    System.out.println("I'm a singleton by enum !");

}

}


小结:懒汉模式就是上来就直接初始化实例,但这带来的问题就是浪费了资源;饿汉模式呢等到要用的时候再去初始化,但是要考虑到多线程带来的影响做了同步处理,这样每次创建的时候都要去判断同步锁会降低效率; 枚举是现在最完美的单例实现方式,因为它是通过jvm自己去做的同步处理,且枚举本身就绝对防止多次初始化;