单例模式
单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意
系统运行期间,有且仅有一个实例。
(1)一个类只有一个实例——最基本的要求,只提供私有构造器。
(2)它必须自行创建这个实例,定义了静态的该类私有对象。
(3)它必须自行向整个系统提供这个实例,提供一个静态的公有方法,返回创建或者获取本身的静态私有对象。
懒汉模式
在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例
特点
线程不安全
延迟加载(lazy loading)
public class Student{
private Student(){}
//这是声明这个对象,什么时候使用它的时候什么时候去创建
private static Student student = null;
//线程同步锁,确保内存中只能有一个对象
public synchronized static Student getStudent(){
if (student == null) {
student = new Student();
}
return student;
}
}
饿汉模式
在类加载的时候,就完成初始化
特点
线程安全
不具备延迟加载特性
public class Student{
//私有构造方法
private Student(){
}
//在本类中进行实例,只能实例一次,并且是私有的
private static final Student STUDENT = new Student();
//提供公共的方法,供外界去访问
public static Student getStudent(){
return STUDENT;
}
}