单利模式分为饿汉式和懒汉式,但无论是哪种模式,都是对类的对象来说的,创建类的一个对象。
饿汉式:类加载时就创建对象。
懒汉式:需要的时候才创建对象。
创建的步骤基本一致
私有化构造方法
定义一个变量,并私有化
对外提供一个可以公开获取对象的方法
饿汉式
public class Teacher {
private Teacher() {
}
private static Teacher teacher = new Teacher();
public static Teacher getInstance(){
return teacher;
}
public void teach(){
System.out.println("老师教学生知识。");
}
}
使用
public class TeacherTest {
public static void main(String[] args) {
Teacher teacher = Teacher.getInstance();
teacher.teach();
}
}
懒汉式
public class Student {
private Student() {
}
private static Student student;
public synchronized static Student getInstance() {
if (student == null) {
student = new Student();
}
return student;
}
public void study(){
System.out.println("学生在刻苦学习知识。");
}
}
使用
public class StudentTest {
public static void main(String[] args) {
Student student = Student.getInstance();
student.study();
}
}
懒汉式的优点:
- 延迟加载
- 线程安全(加锁)
ImageLoader.jar
用的是懒汉式
private volatile static ImageLoader instance;
/** Returns singleton class instance */
public static ImageLoader getInstance() {
if (instance == null) {
synchronized (ImageLoader.class) {
if (instance == null) {
instance = new ImageLoader();
}
}
}
return instance;
}
protected ImageLoader() {
}
但是看法中常用饿汉式。
类Runtime
就是单利模式中的饿汉式