Singleton 单件(创建型模式)
需积分: 0 25 浏览量
更新于2008-04-16
收藏 8.19MB RAR 举报
**Singleton 模式详解**
Singleton 是一种在软件工程中广泛使用的创建型设计模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要频繁实例化然后销毁的对象,或者当实例化一个对象需要消耗大量资源时,如数据库连接、线程池、配置对象等。
Singleton 的核心思想是限制类的实例化过程,使得类的实例只能通过特定的方式(通常是静态方法)获取,从而保证了全局范围内只有一个实例存在。在Java中,通常我们采用懒汉式和饿汉式两种方式实现 Singleton。
1. **懒汉式 Singleton**:延迟初始化,只有在第一次调用 getInstance 方法时才创建实例。这种方式线程不安全,如果在多线程环境下可能会创建多个实例。为了解决这个问题,可以采用双重检查锁定(Double-Check Locking)机制,代码如下:
```java
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) { // 第一次检查
synchronized (Singleton.class) {
if (instance == null) { // 第二次检查
instance = new Singleton();
}
}
}
return instance;
}
}
```
2. **饿汉式 Singleton**:在类加载时就完成实例化,避免了线程同步问题,但会占用不必要的内存空间。代码如下:
```java
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
```
3. **静态内部类 Singleton**:利用 Java 类加载机制保证初始化实例时只有一个线程,同时又避免了懒汉式的同步开销。代码如下:
```java
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
4. **枚举 Singleton**:这是 Bill Pugh 提出的一种创建 Singleton 实例的方法,既能防止反序列化重新创建新的实例,又避免了同步问题。代码如下:
```java
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
```
5. **线程局部变量 Singleton**:适用于每个线程需要自己独立的实例,但并不保证全局唯一。这种方式在多线程环境下很有用,但不是传统的 Singleton 模式。
了解 Singleton 模式后,我们需要注意它的一些潜在问题。Singleton 可能导致系统的耦合度增加,因为它全局可访问,可能导致测试困难。此外,如果 Singleton 实例持有外部资源(如数据库连接),不正确地管理这些资源可能导致资源泄露。在某些情况下,Singleton 还可能阻碍系统扩展,因为它限制了类实例的数量。
设计模式是解决常见软件设计问题的模板,Singleton 模式是其中最基础、最常用的一种。通过深入理解并恰当运用 Singleton,我们可以提高代码的可维护性和可复用性。在实际开发中,要根据项目需求和场景选择合适的 Singleton 实现方式,以达到最佳的设计效果。
ynaigd
- 粉丝: 2
- 资源: 6
最新资源
- 【Vite4+Vue3】TypeScript移动端模板2024,极速开发体验,Vant4+Pinia最佳实践
- 【Vite4+Vue3】JavaScript移动端模板2024,零配置极速开发,Vant4+Pinia组合
- 码上抓小说:Python爬虫搞定顶点小说全攻略
- gripper-covers
- python圣诞树代码,有动态3d效果
- comsol 相控阵16阵元聚焦声场仿真 双层结构(水 钢)平界面聚焦频域模型,聚焦点设在第二层介质,坐标(0,10)mm 图1为声压二维分布,图2为深度10mm径向声压分布,图3为钢内中心轴向声压
- 51单片机蓄电池充电保护设计Proteus仿真 功能描述如下:本设计由STC89C52单片机电路+LCD1602液晶显示电路+ACS712电流检测电路+分压电路+PCF8591 AD检测设计+继电器电
- Undertale.apk
- 基于MATLAB的simulink 基于dsp28335的直流电机的驱动模型(配套直流电机) 模型+讲解视频 该模型搭建可直接烧到开发板上,MATLAB版本是2020b,不需要敲写c代码,需要有一定的
- 家庭能源管理matlab 采用matlab编制家庭能源管理程序,包括各种家用电器的调度运行策略,程序通用性好
- Chapter 03 复合数据类型-1(资源)
- 出一个18650圆柱锂电池comsol模型 参数已配置,生热研究
- 白色扁平风格的图片设计资源企业网站源码下载.zip
- 白色扁平风格的温室大棚公司企业网站源码下载.zip
- 白色扁平风格的舞蹈课程学校整站网站源码下载.zip
- 白色扁平风格的夕阳时间轴自然风光模板下载.zip