Java中单例模式定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。
仅有一个实例=========》创建一个静态的本类类型的成员属性
自行实例化======.====》就是要我们将此类的个构造私有化
向整个系统提供=======》创建一个供外部访问的接口(即以public修饰的返回值类型为本类类型的方法)
单例模式的实现方式有三种:
懒汉式:不调用不赋值
饿汉式:建类即赋值
双重锁:两次synchronized
直接上例子:
public class Student{ private static Student stu;//懒汉式 private Student(){ //构造方法私有化 } public static Student newStudent(){ if(stu==null){ stu=new Student();//调用此方法时实例化本类的唯一对象 } } }
public class Student2 { // 01.创建一个静态的本类类型的成员属性 private static Student2 stu = new Student2(); // 饿汉式 // 02.私有化构造 不允许有 其他的构造 private Student2() { } // 03.创建供外部访问的接口 返回值类型是Student public static synchronized Student2 getInstance() { return stu; } }
public class Student3 { // 01.创建一个静态的本类类型的成员属性
//双重锁
private static Student3 stu; // 02.私有化构造 不允许有 其他的构造 private Student3() { } // 03.创建供外部访问的接口 返回值 肯定是我们Student public static synchronized Student3 getInstance() { if (stu == null) { // 证明用户是第一次访问 synchronized (Student3.class) { if (stu == null) { // 再次验证对象是否为空 stu = new Student3(); } } } return stu; // 如果stu有了 直接返回 不需要再次创建 } }