在深入探索设计模式的旅程中,单例模式无疑是一个不可忽视的重要概念。单例模式的核心目的在于确保一个类在其生命周期内只有一个实例存在,并提供一个全局访问点,以便外部代码能够方便地获取这一唯一的实例。
单例模式根据其实现方式的不同,可以分为饿汉式和懒汉式两种。继上次介绍了饿汉式单例模式后,今天我们来详细了解一下懒汉式单例模式。
有需要回顾 Java 实现饿汉式单例模式的同学,可以点击下方文章标题,直接跳转文章哦!
懒汉式单例模式的特点是在实例化对象时会稍显“懒惰”,即只有在真正需要使用到这个实例时,才会去创建它。这种方式避免了在类加载时就创建实例可能带来的资源浪费问题。
下面是使用 Java 实现懒汉式单例模式的示例代码:
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
在上述代码中,我们首先定义了一个静态变量 instance 用于存储单例对象。构造函数被设置为私有,确保外部无法直接通过构造函数创建新的实例。getInstance
方法则提供了一个全局访问点,当我们第一次调用这个方法时,会创建一个新的实例,并将其赋值给instance
变量。之后的调用都会返回这个已经创建的实例。
值得注意的是,为了避免多线程环境下的并发问题,我们在 getInstance
方法上加上了 synchronized
关键字,确保了每次创建实例时的线程安全性。
懒汉式单例模式的优点在于它实现了延迟加载,只有当实例真正被需要时才会进行创建,这在一定程度上节省了资源。然而,缺点是在多线程环境下,频繁的同步操作可能会导致性能问题。
完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!
在线访问:https://www.codecopy.cn/post/06wdec
在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~
如果你对其他设计模式的实现感兴趣,或者有任何关于编程的问题,欢迎在评论区留下你的见解和疑问。
往期推荐
今日代码大赏 | Python 实现二分查找算法
今日代码大赏 | Python 实现归并排序算法
今日代码大赏 | Java 实现二分查找算法
今日代码大赏 | Java 实现快速排序算法