java 设计模式–单例模式推理过程 设计模式(全名:软件设计模式),是一套反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性,程序的重用性。 1. 单例模式 1.1单例模式的特点 单例类只能有一个实例。 单例类必须自己创建自己唯一的实例。 单例类必须给所有其他对象提供这个实例。 1.2 实现过程【懒汉】 第一次 /* * 1. 私有的构造方法 * 共有的话别人一调用就会有新的单例对象,没法保证单一的实例 * 2. 公有静态的方法 ---- 用来调用私有的构造方法 * 由于构造方法是私有的,我们要想调用的话, **Java设计模式——单例模式推理过程** 设计模式是软件开发中的一种最佳实践,它封装了前辈们在解决常见问题时积累的经验。这些模式被广泛使用、被大家所熟知,并且已经进行了系统的分类。设计模式的目标是提高代码的可重用性、可读性和可靠性,确保程序具有良好的结构。 **单例模式**是设计模式中的一种,它的主要特点包括: 1. **唯一实例**:在整个应用程序中,单例类只能有一个实例存在。 2. **自我创建**:单例类必须负责自己的实例化,不允许其他对象对其进行实例化。 3. **全局访问点**:单例类需要提供一个全局访问点,以便其他对象可以获取到这个唯一的实例。 单例模式的实现通常有两种方式:**懒汉式**和**饿汉式**。 **懒汉式**单例模式的实现着重于延迟初始化,即只有在真正需要实例时才会创建。初始的简单懒汉式实现如下: ```java public class SimpleLazySingleton { private SimpleLazySingleton() {} private static SimpleLazySingleton instance = null; public static SimpleLazySingleton getInstance() { if (instance == null) { instance = new SimpleLazySingleton(); } return instance; } } ``` 然而,这种实现存在线程安全问题。当多个线程同时调用`getInstance()`时,可能会创建多个实例。为了解决这个问题,可以引入`synchronized`关键字: ```java public class ThreadSafeLazySingleton { private ThreadSafeLazySingleton() {} private static ThreadSafeLazySingleton instance = null; public static synchronized ThreadSafeLazySingleton getInstance() { if (instance == null) { instance = new ThreadSafeLazySingleton(); } return instance; } } ``` 尽管线程安全了,但每次调用`getInstance()`都需要同步,这会影响性能。于是出现了双重检查锁定(Double-Check Locking)优化: ```java public class DoubleCheckedLockingSingleton { private DoubleCheckedLockingSingleton() {} private static volatile DoubleCheckedLockingSingleton instance = null; public static DoubleCheckedLockingSingleton getInstance() { if (instance == null) { synchronized (DoubleCheckedLockingSingleton.class) { if (instance == null) { instance = new DoubleCheckedLockingSingleton(); } } } return instance; } } ``` 这里的`volatile`关键字确保了多线程环境下对`instance`变量的正确可见性。 **饿汉式**单例模式则是在类加载时就完成了初始化,因此不存在线程安全问题,也无需同步: ```java public class EagerSingleton { private static final EagerSingleton instance = new EagerSingleton(); private EagerSingleton() {} public static EagerSingleton getInstance() { return instance; } } ``` 饿汉式单例模式在类加载时就创建了实例,所以没有延迟初始化,但在某些场景下可能更高效,因为它避免了同步开销。 单例模式是Java开发中常见的设计模式,它在需要控制实例数量,尤其是全局只允许一个实例的情况下非常有用。理解并熟练运用单例模式,有助于编写更加健壮、高效的代码。
- 粉丝: 5
- 资源: 982
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- cTrader指标:Variety Period clock control panel:品种周期时钟控制面板
- cTrader指标:Variety Period time switching panel:品种周期时间切换面板
- 字符串遗传算法-excited-JS-plus1S.zippython
- 附件文件下载安装啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
- sdram verilog 代码
- GNOME-Dia-Diagram-Editor-0.97.1-1-Win32-Zip-2010-02-07.tar.gz
- 80删除有序数组中的重复项 II.zip
- 79单词搜索.zip(算法)
- GNOME-Dia-Diagram-Editor-Shapes-Repository-20130624.tar.gz
- GNOME-Dia-Diagram-Editor-0.97.3-13.1-Linux(rpm)-2024-09-13.zip
评论0