技术文摘
单例模式的多种写法竟如此之小?
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中中文和数字换行行为不同的原因
- 用鼠标滚轮实现固定高度一页滚动的方法
- 前端实现自定义路径导出功能的方法
- PC 端多屏适配策略:兼顾 PC 网页与响应式 H5 项目的方法
- 绝对定位元素未达最大宽度时换行原因
- 表格滚动时内容超出表头的解决方法
- 离开页面后定时器致 DIV 运动加速的解决办法
- Vue 应用从 HTML 文件返回时无法回到原 Vue 文件的原因
- 如何解决Node.js爬取网页时的编码异常问题
- Vue.js 3.2 父子组件传 ref 数组监听:子组件 watch 不加 () => 无法进入监听的原因
- 在 React 里怎样实现超出容器可滚动效果
- CSS 制作左侧绿色三角形气泡样式的方法
- HTML 标签解析异常:代码片段为何显示乱行
- 移动端标签文字精确居中的方法
- Vite中使用monorepo架构导入静态JS文件的方法