这个模式大家应该都用过,目的就是保证类的对象的唯一性,那么在实现的过程中呢,有多种方法。
- 饿汉式,类加载就创建
这个也是写起来最方便的
package bean;
public class SingleBean {
//实例化私有对象
private static SingleBean singleBean=new SingleBean();
//封装构造方法避免其它类直接new
private SingleBean(){
}
//提供get方法
public static SingleBean getSingleBean() {
return singleBean;
}
}
2.懒汉式 同步代码双重判断
package bean;
public class SingleBean {
//实例化私有对象
private static SingleBean singleBean;
//封装构造方法避免其它类直接new
private SingleBean(){
}
//提供get方法
public static SingleBean getSingleBean() {
if(singleBean==null){
synchronized (SingleBean.class) {//同步代码块,避免线程安全错误
if(singleBean==null){//再次判断
singleBean=new SingleBean();
}
}
}
return singleBean;
}
}
3.使用java的枚举 很简单
如果对java的枚举不熟悉可以点击java 枚举详解
package bean;
public enum SingleBean {
SINGLEBEAN;
}
4.使用一个静态内部类持有对象,避免初始化的时候加载
package bean;
public class SingleBean {
// 封装构造方法避免其它类直接new
private SingleBean() {
}
private static final class SingleBeanHolder {//静态内部类
private static SingleBean singleBean = new SingleBean();
}
public static SingleBean getSingleBean() {
return SingleBeanHolder.singleBean;
}
}
除了第一中饿汉式,其它的都不会在加载类的时候进行初始化,且都是线程安全的。