枚举创建单例的模式的优势比较:
| 方式 | 优点 | 缺点 |
|---|---|---|
| 饿汉式 | 线程安全, 调用效率高 | 不能延迟加载 |
| 懒汉式 | 线程安全, 可以延迟加载 | 调用效率不高 |
| 双重检测锁 | 线程安全, 调用效率高, 可以延迟加载 | - |
| 静态内部类 | 线程安全, 调用效率高, 可以延迟加载 | - |
| 枚举 | 线程安全, 调用效率高 | 不能延迟加载 |
枚举创建单例模式的案例如下:
1:创建一个类实现对象的调用
public class Resource {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2:创建一个枚举实现单例模式的创建
public enum SomeThing {
INSTANCE;//任意常量名称,实现数据的调用SomeThing.INSTANCE.getInstance();
private Resource instance;
SomeThing() {
instance = new Resource();
}
public Resource getInstance() {
return instance;
}
}
3:创建一个测试类实现对单例模式的测试
public class Testdemo {
public static void main(String[] args) {
Resource instance1 = SomeThing.INSTANCE.getInstance();
Resource instance2 = SomeThing.INSTANCE.getInstance();//同一个对象
instance1.setName("123123");
System.out.println(instance1);
System.out.println(instance2);
}
}
创建懒汉式加锁的单例模式
/**
* 懒汉式之加锁处理单据模式
* @author cwh
* @date 2018-4-20 上午11:08:13
*/
public class DoubleCheckSingleton {
/**
* 需要使用volatile
* 保证所有的写(write)都将先行发生于读(read)
*/
private static volatile DoubleCheckSingleton instance;
private DoubleCheckSingleton() {
}
public static DoubleCheckSingleton getInstance() {
if (instance == null) { //Single Checked
synchronized (DoubleCheckSingleton.class) {
if (instance == null) { // Double Checked
instance = new DoubleCheckSingleton();
}
}
}
return instance;
}
public static void main(String[] args) {
DoubleCheckSingleton instance1 = DoubleCheckSingleton.getInstance();
DoubleCheckSingleton instance2 = DoubleCheckSingleton.getInstance();//同一个对象
System.out.println(instance1);
System.out.println(instance2);
}
}
本文详细介绍了几种常见的单例模式实现方法,包括饿汉式、懒汉式、双重检测锁及枚举方式等,并通过示例代码展示了每种方法的特点与适用场景。
2610

被折叠的 条评论
为什么被折叠?



