**
设计模式之单例模式*
所谓单例模式,就是保证类在内存中只有一个对象
而如何保证类在内存中只有一个对象?
思考一下,我们平时在实例化类的对象时,基本都是通过new 的方式来实例化一个对象,其实说白了,就是调用了需要实例化类的默认的构造方法,所以为了保证类只有一个对象,我们需要将类的对象设置为private
1)控制类的创建,不让其他类创建本类的对象,即需要设置private属性
2)在本类中定义一个本类的对象
**
饿汉模式
**
public class HungrySingleton {
//私有化构造方法
private HungrySingleton() {
}
//创建实例
private final static HungrySingleton HUNGRY_SINGLETON = new HungrySingleton();
//创建一个get方法,获取实例
public static HungrySingleton getInstance() {
return HUNGRY_SINGLETON;
}
}
```虽然简洁方便,但是在类加载时就生成,会降低启动速度。适用于对象功能简单,占用内存较小,适用频繁的。
**
## 懒汉模式
**
public class LazySingleton {
private LazySingleton() {
}
// private static LazySingleton lazy;
//可能会发生指令重排,所以加上volatile
private volatile static LazySingleton lazy;
public static LazySingleton getInstance() {
if (lazy == null) {
synchronized (LazySingleton.class){
if(lazy==null){
lazy = new LazySingleton();
}
}
}
return lazy;
}
}
静态内部类单例
public class Holder {
private Holder() {
}
public static Holder getInstance() {
return InnerClass.HOLDER;
}
public static class InnerClass{
private static final Holder HOLDER = new Holder();
}
}