Show Me The Code -- 设计模式--单例
简述:单例指一个类只允许拥有一个对象,而且这个对象是它自己进行实例化然后向整个系统提供出来,这样我们把它称为单例类。
结构和特点:只有一个实例;这个实例必须自己创建;为其他的所有对象提供这个实例;
使用场景:计数器、加载配置文件信息的类
饿汉式:
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自己去做的同步处理,且枚举本身就绝对防止多次初始化;
