1.静态内部类实现延迟加载的单例模式
/**
* 静态内部类,不会随着类的加载而加载; 静态内部类需要单独的初始化; 因为在内部类加载和初始化时创建的,so线程安全的
*
* @author HP
*
*/
public class SingleTon1 {
private SingleTon1() {
}
private static class InnerClass {
private final static SingleTon1 singleTon1 = new SingleTon1();
}
public static SingleTon1 getInstance() {
return InnerClass.singleTon1;
}
}
2.枚举的方式
/**
* 使用枚举,就是单例模式,也是写法最简单的
* @author HP
*
*/
public enum SingleTton2 {
SINGLETON;
}
3.
/**
* 这种饿汉式,加了静态代码块,可以在初始化时候加载配置文件,
* @author HP
*
*/
public class SingleTon3 {
private static SingleTon3 singleTon;
static {
Properties properties = new Properties();
try {
//类路径下读取"person"的配置文件
properties.load(SingleTon3.class.getClassLoader().getResourceAsStream("person.properties"));
} catch (IOException e) {
e.printStackTrace();
}
singleTon = new SingleTon3(properties.getProperty("info"));
}
private String info;
private SingleTon3(String info) {
this.info = info;
System.out.println(info);
}
public static SingleTon3 getInstance() {
return singleTon;
}
}