(01)单例模式
概念
单例模式让类只能new一个对象,使得每次从类中拿到的对象都是同一个对象。
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
实现方式
饿汉式
在成员变量中创建对象
/**
* 单例-饿汉式
*/
public class Demo {
private static final Demo instance = new Demo();
private Demo() {
}
public static Demo getInstance() {
return instance;
}
}
懒汉式
在需要对象的时候,再进行创建。
- 懒汉式需要双重if判断
- 懒汉式需要加锁,锁是类的字节码文件
- 需要加volatile关键字,禁止指令重排,否则可能会拿到成员变量未初始化的对象
/**
* 单例-懒汉式
*/
public class Demo {
private static volatile Demo instance;
private Demo() {
}
public static Demo getInstance() {
if (instance == null) {
synchronized (Demo.class) {
if (instance == null) {
instance = new Demo();
}
}
}
return instance;
}
}
枚举式(最完美的单例模式)
- 懒汉式/饿汉式虽然不可以new一个新的对象,但是可以通过反射的方式创建对象
- 枚举方式虽然也能通过反射的方式来创建对象,但是通过反射创建出来的枚举都会是同一个对象
/**
* 单例-枚举方式
*/
public enum Demo {
instance;
public void m() {
System.out.println("调用了m方法");
}
public static void main(String[] args) {
Demo.instance.m();
}
}

浙公网安备 33010602011771号