技术文摘
单例模式的多种写法竟如此之小?
2024-12-31 05:36:59 小编
单例模式的多种写法竟如此之小?
在编程领域,单例模式是一种常见且实用的设计模式。它确保一个类只有一个实例存在,并提供全局访问点来获取该实例。令人惊讶的是,实现单例模式的方法多样,且代码简洁高效。
我们来看看懒汉式单例。这种方式在第一次调用获取实例的方法时才创建实例。以下是一个 Java 示例代码:
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
懒汉式的优点是延迟初始化,节省资源,但在多线程环境下可能会出现问题。
接下来是饿汉式单例。在类加载时就创建实例,保证了线程安全。
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
这种方式简单直接,但可能会在不需要实例时就提前创建,造成一定的资源浪费。
还有一种常见的写法是双重检查锁单例。
public class DoubleCheckSingleton {
private static DoubleCheckSingleton instance;
private DoubleCheckSingleton() {}
public static DoubleCheckSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckSingleton.class) {
if (instance == null) {
instance = new DoubleCheckSingleton();
}
}
}
return instance;
}
}
通过双重检查,既保证了线程安全,又在一定程度上提高了性能。
单例模式的多种写法各有特点,我们可以根据具体的业务需求和场景选择合适的方式。无论是哪种写法,其核心思想都是确保只有一个实例存在,以达到资源的有效利用和数据的一致性。
在实际开发中,巧妙运用单例模式能够优化系统性能、提高代码的可维护性和可读性。希望大家通过对单例模式多种写法的了解,能够在编程中更加得心应手,创造出更优秀的代码。
- CSS中如何实现文本背景色随波浪形状持续变化
- 解决VSCode中折叠部分代码复制问题的方法
- 复制折叠代码的方法
- 怎样将 less 变量与媒体查询结合来设置不同元素的内边距
- LESS 中怎样通过媒体查询动态调整元素内边距
- Props 控制 v-if 对 子组件生命周期 有何影响
- 注册事件的两种方式为何产生意外效果
- 小程序用相对定位压住图片且显示灰色背景的方法
- 双列布局左右列高度不一致的解决方法
- 如何实现底部导航栏点击切换动画
- echarts地图图例点击后的颜色变化方法
- v-if和props变量交互时子组件的渲染机制
- 用 Intersection Observer API 实现页面滚动元素显隐效果的方法
- 神奇页面滚动效果 按钮如何随页面消失
- 怎样利用透明背景元素有效遮挡渐变背景里的兄弟元素