设计模式之单例模式:保证唯一实例
发布时间: 2023-12-17 07:41:59 阅读量: 41 订阅数: 35
# 第一章:介绍
## 1.1 什么是设计模式
设计模式是软件开发中常用的一种解决问题的方式,它是从经验中总结出来的一套被广泛应用于软件开发中的解决方案。设计模式提供了一种可重用的解决方案,可用于解决经常出现的设计问题,从而提高代码的可维护性和可复用性。
## 1.2 设计模式的分类
设计模式根据它们的功能或使用场景进行分类,常见的设计模式有创建型模式、结构型模式和行为型模式。
- 创建型模式:用于对象的创建和实例化,包括单例模式、工厂模式、抽象工厂模式等。
- 结构型模式:用于处理类与对象的组合和关联,包括适配器模式、装饰器模式、代理模式等。
- 行为型模式:用于对象之间的通信和交互,包括观察者模式、命令模式、策略模式等。
## 1.3 单例模式的定义和作用
单例模式是创建型模式中最简单的一种模式,它的作用是保证一个类仅有一个实例,并提供一个全局访问点。
在某些情况下,我们需要确保系统中只存在一个实例对象,例如数据库连接池、线程池、日志记录器等。此时,我们可以使用单例模式来确保只有一个实例被创建,并提供对该实例的全局访问。
单例模式具有以下特点:
- 保证只有一个实例对象被创建。
- 提供对实例的全局访问。
- 节省系统资源,避免重复创建对象。
## 第二章:单例模式的实现方式
### 2.1 饿汉式单例模式
饿汉式单例模式是最简单的一种实现方式,其特点是在类加载的时候就创建了实例,保证了在多线程环境下的唯一性。
```java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// 私有化构造方法,防止外部实例化
}
public static Singleton getInstance() {
return instance;
}
}
```
在上述代码中,私有化的构造方法保证了外部无法直接实例化对象,通过静态方法getInstance()获取实例,而且该实例是在类加载的时候就创建好的。
### 2.2 懒汉式单例模式
懒汉式单例模式是在真正使用时才创建实例,延迟加载的方式。这种方式在多线程环境下需要考虑线程安全问题。
```java
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有化构造方法,防止外部实例化
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
在上述代码中,getInstance()方法添加了synchronized关键字,保证了在多线程环境下只能有一个线程能够进入创建实例的代码块。
### 2.3 双重检查锁定单例模式
双重检查锁定单例模式是为了进一步优化懒汉式单例模式的性能问题,避免每次获取实例都进行同步。
```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;
}
}
```
在上述代码中,通过在instance变量上加上volatile关键字,保证了多线程环境下instance的可见性。另外,在创建实例的代码块中再次进行了判空操作,避免了多个线程同时通过第一个判空进入,导致创建多个实例的问题。
### 2.4 静态内部类单例模式
静态内部类单例
0
0