单列模式
定义:
在一个应用程序中单列模式的类有且只有一个实例,单列模式中又分为两种,饿汉模式和懒汉模式。
一、饿汉模式
定义:饿汉模式,是在类加载的时候便创建实例,所谓饿汉,即表示这个类很饥渴,需要快速得到类的实例,所以在类加 载的时候便会产生类的实例。
实现方式:
1.将类默认的构造方法私有化,让外部不能直接new一个实例。
2.在类的内部创建该类的实例,该实例静态私有化。
3.提供一个静态的get方法,返回内部静态类的实例。
当我们需要得到这个类的实例时,直接调用这个类的getOne的静态方法便可得到该类的实例,由于是静态的,所以在类 加载的时候便会创建该类的实例。
二、懒汉模式
定义:在加载的时候并不会创建该类的实例,而是只有在运行期外部调用该类的时候,才会创建该类的实例。所谓懒汉 模式,表明它很懒,你不用,我就不会创建,只有在你需要用时,我才会创建。
实现方式:
1.默认的构造方法私有化,和饿汉模式的第一步一样的。
2.私有化一个该类修饰的成员变量,但是并不会去创建该类的实例。
3.提供一个公共的get方法,在方法里面,首先判断成员变量是不是为空,如果为空,则去new 一个实例,如果不为 空,则直接放回。作用,防止创建多个实例。
三、懒汉模式和懒汉模式的异同
相同:
1.在一个应用程序中都是只能创建类的一个实例。
2.都是将构造方法私有化,在类的内部创建类的实例。
不同:
1.饿汉模式是在类加载时创建实例,而懒汉模式是在运行期需要要调用该类的实例时才创建。
2.由于第一点,所以饿汉模式在类加载的时候比较慢,懒汉模式在运行时比较慢。
3.饿汉模式是属于线程安全的。懒汉模式线程不安全。因为在多线程情况下,有可能存在多个线程同时
去创建类的实列,所以在多线程情况下最后使用饿汉模式
四、枚举类创建单列(推荐使用)
优点: 线程安全,延迟加载,序列化与反序列化安全,反射安全。
package com.test;
public enum Three {
INSTANCE;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Three three=Three.INSTANCE;
three.setName("aa");
System.out.println(three.getName());
}
}
五、应用场景
1.javaweb项目中的application,session便属于单例模式,目的便是全局共享一个实例,