饿汉式单例模式
众所周知 单例模式 有很多种实现的方式。最为经典的就是懒汉式和饿汉式,今天就先简单整理一下饿汉式单例。
代码
public class HungrySingleton {
//构造函数私有化
private HungrySingleton(){};
//全局访问点
private static final HungrySingleton HUNGRY_SINGLETON = new HungrySingleton();
public static HungrySingleton getInstance(){
return HUNGRY_SINGLETON;
}
}
分析
单例模式:即一个类只有一个对象实例
如何保证每个类只有一个实例:构造函数私有化(不可通过构造函数来生成实例)
增加全局访问点,保证只可生成一个实例
优点:执行效率高,性能高,没有任何的锁
缺点:某些情况下,可能会造成内存浪费(类加载的时候直接初始化)
进阶
饿汉式有些进阶的写法:
public class HungaryStaticSingleton {
//构造函数私有化
private HungaryStaticSingleton(){};
//全局访问点
private static final HungaryStaticSingleton HUNGRY_SINGLETON;
static {
HUNGRY_SINGLETON = new HungaryStaticSingleton();
}
public static HungaryStaticSingleton getInstance(){
return HUNGRY_SINGLETON;
}
}
分析:采用代码块的形式,在代码块中进行赋值(只是看上去有逼格)。这里涉及到一个类的加载顺序问题:
类加载顺序:先静态后动态;先上后下;先属性后方法