IT评测·应用市场-qidao123.com技术社区
标题:
【设计模式系列】单例模式(二十)
[打印本页]
作者:
海哥
时间:
2024-12-3 04:30
标题:
【设计模式系列】单例模式(二十)
一、什么是单例模式
单例模式(Singleton Pattern)是一种常用的软件设计模式,属于创建型模式。它的目标是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。
单例模式的主要特点包括:
唯一性
:单例类在整个应用程序的生命周期内只创建一个实例。
全局访问点
:提供了一个全局的访问点,确保全部访问该类的地方都访问的是同一个实例。
延迟初始化
:单例实例通常在第一次被利用时创建(懒汉式),也可以在程序启动时立即创建(饿汉式)。
二、单例模式的典型实现案例
2.1 懒汉式(线程不安全)
:
这种方式下,实例在第一次被利用时才创建。这种方式简单,但在多线程环境下可能会出现多个实例的题目。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
复制代码
2.2 饿汉式(线程安全)
:
在类加载时就立即初始化单例,这种方式制止了多线程的同步题目,但可能导致资源的浪费,因为不管是否利用,单例都会被创建。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
复制代码
2.3 双重校验锁(Double-Checked Locking,线程安全,保举方式)
:
这种方式在获取实例时先检查实例是否已经创建,如果没有创建才进入同步块中创建实例。这种方式既包管了线程安全,又制止了每次访问都进行同步的开销。
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
复制代码
2.4 静态内部类(线程安全)
:
这种方式利用了类加载机制来包管初始化实例时只有一个线程,同时也实现了延迟加载。
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
复制代码
单例模式适用于需要全局只有一个实例的场景,如配置管理器、线程池、缓存等。然而,过度利用单例可能会导致代码的耦合度高,难以测试和维护。因此,在设计时需要根据实际需求谨慎利用单例模式。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4