单例模式:使类在内存中只有一个实例对象。
实现单例的思路是:
a 让外界不能创建对象
b 类本身创建一个对象
c 提供公共的访问方式
无论是懒汉式还是饿汉式都具备以上三点
饿汉式:
public class Student { //为了让getStudent()可以使用stu对象,需要加上static //为了不让外界直接访问,把访问修饰符设置为private private static Student stu = new Student(); //把构造方法私有,防止被外界创建实例 private Student() { } //因为构造是私有的,外界不能直接创建此类对象,需要提供一个公共的方法用来得到实例 //为了让外界即使不创建对象也能使用这个方法,需要用static修饰 public static Student getStudent() { return stu; } }
创建对象的操作被static修饰,也就是说,类一被内存加载,就会去创建对象(被static修饰的成员随着类的加载而加载),所以称做饿汉式
懒汉式:
public class Teacher {
private static Teacher tea = null;
private Teacher() { }
//加上synchronized关键字使线程同步 public static synchronized Teacher getTeacher(){ if(tea==null) tea = new Teacher(); return tea; } }
如果不调用getTeacher()方法就不会去创建对象。体现了延迟加载(懒加载)的思想,懒汉式存在线程安全问题,需要加上synchronized关键字,使线程同步。
饿汉式: