单例模式之饿汉式
- 概述:确保类在内存中只有一个对象(该实例必须自动创建,并且对外提供)
- 优点:在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能
- 缺点:没有抽象层,因此扩展很难。职责过重,在一定程度上违背了单一职责。
- 步骤:如何保证类在内存中只有一个对象呢?
A:把构造方法私有
B:在成员位置自己创建一个对象
C:通过一个公共的方法提供访问
public class Student {
//构造私有
private Student() {}
//自己造一个对象
//静态方法只能访问静态成员变量,加静态
//为了不让外界直接访问修改这个值,加private
private static Student s = new Student();
//提供公共的访问方式
//为了保证外界能够直接使用该方法,加静态
public static Student getStudent() {
return s;
}
}
创建两个对象,如果最后打出来的是true,表示这两个对象是指向同一个对象的,实际上还是一个对象;如果是false,表示,确实创建了两个对象。
public class StudentDemo {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1 == s2);
}
}
单例模式之懒汉式
- 饿汉式:类一加载就创建对象
- 懒汉式:用的时候,才去创建对象
public class Teacher {
private Teacher() {}
private static Teacher t = null;
//面试时记得加synchronized
public synchronized static 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);
System.out.println(t1);
System.out.println(t2);
}
}
面试题:单例模式的思想是什么?写一个代码体现。
开发:饿汉式(是不会出问题的单例模式)
面试:懒汉式(是可能会出问题的单例模式)
- 懒汉式会出的问题有:
- 懒加载(延迟加载)
- 线程安全问题
a. 是否多线程环境(可以是)
b. 是否有共享数据(是)
c. 是否有多条语句操作共享数据(是)
网友评论