单例模式知识点梳理:
1.一个类只能产生一个对象,就是单例模式;
2.饿汉式在类一加载就创建对象;懒汉式在用的时候才去创建;推荐使用饿汉式;
一.单例设计模式概述
- 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
-
如何保证类在内存中只有一个对象呢?
A:把构造方法私有
B:在成员位置自己创建一个对象
C:通过一个公共的方法提供访问
二.优缺点:
-
优点
在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
-
缺点
- 没有抽象层,因此扩展很难。
- 职责过重,在一定程度上违背了单一职责
三.饿汉式与懒汉式的区别
- 饿汉式:类一加载就创建对象;
- 懒汉式:用的时候,才去创建对象;
-
面试题:单例模式的思想是什么?请写一个代码体现
开发:饿汉式(是不会出问题的单例模式)
面试:懒汉式(可能会出问题的单例模式)
A:懒加载(延迟加载)
B:线程安全问题
四.饿汉式示例:
//创建单例类
public class Student {
// 构造私有
private Student() {
}
// 静态方法只能访问静态成员变量
// 为了不让外界直接访问修改这个值,加private
private static Student s = new Student();
// 提供公共的访问方式
// 为了保证外界能够直接使用该方法,加静态
public static Student getStudent() {
return s;
}
}
/*测试类*/
public class StudentDemo {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1 == s2);//true
}
}
五.懒汉式示例:
//单例类
public class Teacher {
private Teacher() {
}
private static Teacher t = null;
publicstatic Teacher getTeacher() {
if (t == null) {
t = new Teacher();
}
return t;
}
}
//测试类
public class TeacherDemo {
public static void main(String[] args) {
Teacher t1 = Teacher.getTeacher();
Teacher t2 = Teacher.getTeacher();
System.out.println(t1 == t2);
}
}