单例模式
单例模式是一种类的创建模式,使用单例模式可以保证为一个类只生成唯一的实例对象,也就是说,在整个程序空间中,该类只存在一个实例对象。
常见的单例的实现有:饿汉式、懒汉式、双重判断、枚举、静态内部类。
应用:spring的bean对象都是单例的,采用饿汉式进行创建。
饿汉式:
package ist.test.model;
/**
* 饿汉式
*/
public class Singleton01 {
// 私有静态对象
private static Singleton01 singleton01 = new Singleton01();
// 构造方法私有化
private Singleton01() {}
// 获取对象的静态方法
public Singleton01 getSingleton01() {
return singleton01;
}
}
懒汉式:
package ist.test.model;
/**
* 懒汉式
*/
public class Singleton02 {
// 私有静态对象声明
private static Singleton02 singleton02 = null;
// 构造方法私有化
private Singleton02() {}
// 私有静态方法
public static Singleton02 getSingleton02() {
if (null == singleton02) {
singleton02 = new Singleton02();
}
return singleton02;
}
}
双重锁式:
package ist.test.model;
/**
* 双重检查加锁
*/
public class Singleton03 {
// 声明对象
private static Singleton03 singleton03 = null;
// 构造方法私有化
private Singleton03 () {}
// 获取对象的公有静态方法
public static Singleton03 getSingleton03() {
if (singleton03 == null) {
synchronized (Singleton03.class) {
if (singleton03 == null) {
singleton03 = new Singleton03();
}
}
}
return singleton03;
}
}
静态内部类式:
package ist.test.model;
/**
* 使用静态内部类实现单例模式
*/
public class Singleton04 {
private static class SingletonHelper {
/**
* 静态初始化器,由JVM保证线程安全
*/
private static Singleton04 instance = new Singleton04();
}
private Singleton04() {}
public static Singleton04 getSingleton04() {
return SingletonHelper.instance;
}
}