单例模式的作用
保证一个类只有一个实例,并且提供访问该实例的全局访问方法。
为什么要用单例模式
1:为了性能考虑。
2:在整个程序空间使用全局变量,共享资源。
几种实现方法:
懒汉式,饿汉式,静态内部类实现 ,枚举实现。(除了)
饿汉式:
// 饿汉式可以在多线程中保证单例
public class Persion{
// 持有局部,静态,常量本类实例。
private static final Persion persion = new Persionz(); // 私有,静态,常量
// 私有化构造函数
private Persion();
// 提供全局,静态的获取实例的方法
public static Persion getPersion(){
return persion;
}
}
懒汉式:
// 懒汉式在多线程中不能保证单例
public class Persion{
private static Persion persion = null; // 私有,静态
private Persion();
public static Persion getPersion(){
if(persion == null){
persion = new Persion();
return persion;
}else{
return persion;
}
}
}
懒汉式的双重检查:
// 保证多线程情况下保证单例
public class Persion{
private static Persion persion = null; // 私有,静态
private Persion();
public static Persion getPersion(){
// 懒汉式的双重检测锁
if(persion == null){
synchronized(Persion.class){
if(persion == null){
persion = new Persion();
}
}
}
return persion;
}
}
# 反射入侵: