- 单例模式概念:保证类存中只有一个对象
- 如何保证类在内存中只有一个对象呢?
- A:把构造方法私有
- B:在成员位置自己创建一个对象
- C:通过一个公共的方法提供访问
- 单例模式分为:
-
饿汉式:类一加载就创建对象
-
懒汉式:用的时候,才去创建对象
- 面试题:单例模式的思想是什么?请写一个代码体现
- 开发:饿汉式(是不会出问题的单例模式)
- 面试:懒汉式(可能会出现问题的单例模式)
-
A:懒加载(延迟加载)
-
B:线程安全问题:
-
a:是否多线程环境 是
-
b:是否有共享数据 是
-
c:是否有多条一句操作共享数据 是
1.饿汉式代码
public class StudentDemo {
public static void main(String[] args) {
Student t1=Student.getTeacher();
Student t2=Student.getTeacher();
System.out.println(t1==t2);
System.out.println(t1);
System.out.println(t2);
}
}
class Student{
//构造私有
private Student() {}
//静态方法只能访问静态变量
static Student s=new Student();
//为了保证外界能够直接使用该方法,加静态
public static Student getTeacher()
{
return s;
}
}
2.懒汉式代码
public class StudentDemo {
public static void main(String[] args) {
Teacher t1=Teacher.getTeacher();
Teacher t2=Teacher.getTeacher();
System.out.println(t1t2);
System.out.println(t1);
System.out.println(t2);
}
}
class Teacher{
private Teacher() {}
private static Teacher t=null;
public synchronized static Teacher getTeacher() {
if(tnull) {
t=new Teacher();
}
return t;
}
}