概述
本文主要介绍使用Enum实现JAVA单例,以及其单例模式的使用。
单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
枚举实现单例
// 单例
public enum BeanContext {
Instance;
private BeanContext() {
System.out.println("init");
}
public void print() {
System.out.println("hello");
}
//测试
public static void main(String[] args) {
BeanContext b1 = BeanContext.Instance;
b1.print();
BeanContext b2 = BeanContext.Instance;
b2.print();
BeanContext b3 = BeanContext.Instance;
b3.print();
BeanContext b4 = BeanContext.Instance;
b4.print();
}
}
结果
init
hello
hello
hello
hello
可以看到用非常简单的方式实现了JAVA单例,结果可以看到其实际只初始化了一次.
Enum 单例模式的应用
public class InstanceDemo {
/**
* 构造方法私有化
*/
private InstanceDemo(){
}
/**
* 返回实例
* @return
*/
public static InstanceDemo getInstance() {
return Singleton.INSTANCE.getInstance();
}
/**
* 使用枚举方法实现单利模式
*/
private enum Singleton {//内部枚举类
INSTANCE;
private InstanceDemo instance;
/**
* JVM保证这个方法绝对只调用一次
*/
Singleton() {
instance = new InstanceDemo();
}
public InstanceDemo getInstance() {
return instance;
}
}
}
简说一下常用的单例实现方式
单例模式有很多种实现方式,懒汉式、饿汉式、静态代码块、双重锁(多线程的情况下可以用)、静态内部类(推荐使用),这里只说一下静态内部类的实现方式.
public class Singleton {
// 私有构造
private Singleton() {}
public static Singleton getInstance() {
return InnerObject.single;
}
// 静态内部类
private static class InnerObject{
private static Singleton single = new Singleton();
}
}
总结
单例模式的三大要点:线程安全、延迟加载、序列化与反序列化安全。
一盏灯, 一片昏黄; 一简书, 一杯淡茶。 守着那一份淡定, 品读属于自己的寂寞。 保持淡定, 才能欣赏到最美丽的风景! 保持淡定, 人生从此不再寂寞。