设计模式
单例设计模式
单例类只有一个实例。
单例类必须自己实例化自己。
单例类需要向外提供实例。
当一个对象只需要一个实例时,就用单例设计模式。
eg.一个班只有一个班主任,对几个同班同学而言
饿汉式
不管有没有实例化,都会new一个对象
经典空间换时间
public class classMaster {
private String name;
private int age;
private static classMaster instance=new classMaster();
private classMaster(){}
public static classMaster getInstance() {
return instance;
}
}
懒汉式
先不创建对象,当new的时候查询对象是否为空
public class classMaster {
private String name;
private int age;
private static classMaster instance=null;
private classMaster(){}
public static classMaster getInstance() {
if(instance==null){
instance=new classMaster();
}
return instance;
}
}
双重锁
多线程情况下
1.线程锁
public class classMaster {
private String name;
private int age;
private static classMaster instance=null;
private classMaster(){}
public static synchronized classMaster getInstance() {
if(instance==null){
instance=new classMaster();
}
return instance;
}
}
双重锁判断
public class classMaster {
private String name;
private int age;
private static classMaster instance=null;
private classMaster(){}
public static classMaster getInstance() {
if(instance==null){
//同步块,线程安全的创建实例
synchronized(classMaster.class){
//再次检查是否存在
if(instance==null){
instance = new classMaster();
}
}
}
return instance;
}
}
静态内部类
线程安全:由静态内部类中的静态成员初始化时创建实例,通过JVM类加载机制来保证线程的安全性。
懒加载:使用静态内部类的方式,让类classMasterHolder只有在使用的时候才会被加载,实例才会创建,借机实现了懒加载。
public class classMaster {
private String name;
private int age;
private classMaster(){}
// 只有当类被调用时,才会加载
private static class classMasterHolder{
// 静态初始化器,由JVM来保证线程安全
private static classMaster instance=new classMaster();
}
public static classMaster getInstance() {
return classMasterHolder.instance;
}
}
1275

被折叠的 条评论
为什么被折叠?



