目录
创造型设计模式总览
单例设计模式
我之前个人理解主要分为两个部分:懒汉式和饿汉式,因此从懒汉和饿汉出发进行分析
饿汉式:(线程安全)资源浪费,因为一定会维护一个创建好的对象
public class Student1 {
// 2:成员变量初始化本身对象
private static Student1 student = new Student1();
// 构造私有
private Student1() {
}
// 3:对外提供公共方法获取对象
public static Student1 getSingletonInstance() {
return student;
}
public void sayHello(String name) {
System.out.println("hello," + name);
}
}
懒汉式:(线程不安全)
public class Student2 {
//1:构造私有
private Student2(){}
//2:定义私有静态成员变量,先不初始化
private static Student2 student = null;
//3:定义公开静态方法,获取本身对象
public static Student2 getSingletonInstance(){
//没有对象,再去创建
//多线程情况下,该处容易造成线程安全问题
if (student == null) {
student = new Student2();
}
//有对象就返回已有对象
return student;
}
}
因为存在线程安全问题,首先可以想到加Synchronized,确实加入之后解决了线程安全问题,但是每次获取单例都需要进行排队,不管对象是否存在,效率极其低下
public static synchronized Student3 getSingletonInstance(){}
优化思路,只有在student对象为空的时候加锁(又产生了一个新的问题