单例模式:
就是指类在内存中只能有一个对象
分析:怎么保证它只有一个对象呢?
A:外界不能够随意创建对象。
把构造方法私有化
B:类本身要创建一个对象。
C:通过公共的方式提供给别人。
单例模式分类:
饿汉式:类加载就创建对象(开发用)
懒汉式:什么时候用,就什么时候创建。(面试用)
为什么有这个分类呢?
A:懒汉式属于延迟加载。
B:而且懒汉式线程有安全问题。怎么解决呢?两个字:加锁!!!
开发用的单例设计模式之饿汉式(以Student为例)
public class Student {
// 构造方法私有化
private Student() {
}
// 类本身要有一个对象,由于静态只能访问静态,所以这里加静态;
//为了不让外界通过类名直接访问s成员变量,就加私有
private static Student s = new Student();
// 对外提供公共方式,为了不让外界通过类名访问就加静态
public static Student getStudent() {
return s;
}
//这个方法可写可不写
public void show() {
System.out.println("hello");
}
}
}
public class StudentTest {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
s1.show();
s2.show();// 结果是一样的,s1和s2是同一个对象
}
}
面试用的单例设计模式之懒汉式(以Teacher为例)
public class Teacher {
// 构造方法私有化
private Teacher() {
}
// 类本身要有一个对象,但现在不创建
private static Teacher t = null;
// 对外提供公共方式,并创建对象,方法加锁解决线程安全问题
public synchronized static Teacher getTeacher() {
if (t == null) {
t = new Teacher();
}
return t;
}
public void show() {
System.out.println("world");
}
}
public class TeacherTest {
public static void main(String[] args) {
Teacher t1 = Teacher.getTeacher();
Teacher t2 = Teacher.getTeacher()
t1.show();
t2.show();//结果是一样的,t1和t2是同一个对象
}
}
|
|