单例模式属于创建者模式。单例类提供了一种访问其内部唯一的对象的方法,可以直接访问,无需实例化该类的对象。
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
关键在于私有化构造函数
懒汉式表示不在一开始就创建对象,在需要的时候再创建
public class LazyMode {
/**
* 私有化构造方法
*/
private LazyMode() {}
/**
* 静态私有的实例
* static保证类没有创建实例也可以用这个实例
*/
private static LazyMode INSTANCE = null;
/**
* public的访问单例的方法
* 这个方法也必须是static的,不然无法返回static的INSTANCE
*
* 注意,这个方法是线程不安全的
*/
public static LazyMode getInstance() {
if (INSTANCE == null){
INSTANCE = new LazyMode();
}
return INSTANCE;
}
}
public class LazyModeSafe {
private LazyModeSafe() {}
private static LazyModeSafe INSTANCE;
public static synchronized LazyModeSafe getInstance() {
if (INSTANCE == null){
INSTANCE = new LazyModeSafe();
}
return INSTANCE;
}
}
这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
基于 classloader 机制避免了多线程的同步问题,但是没有做到lazy load
public class HungryMode {
private HungryMode() {}
private static HungryMode INSTANCE = new HungryMode();
public static HungryMode getInstance() {
return INSTANCE;
}
}
原文:https://www.cnblogs.com/swifthao/p/13673421.html