Java设计模式——单例模式
⚪单例模式是一种常见的创建型设计模式。
⚪意图:确保一个类只有一个实例,并提供全局访问点。
⚪以下是工厂方法模式的关键要点:
▷ 角色和责任:
-
单例类(Singleton Class):
这是实现单例模式的类,它确保只有一个实例可以被创建。
提供一种方法来获取该实例。
▷ 工作流程:
- 将类的构造函数私有化,以防止外部代码创建新的实例。
- 提供一个静态方法,通常称为 getInstance(),用于获取类的唯一实例。
- 在 getInstance() 方法中,检查是否已经创建了实例。如果已经创建了实例,返回该实例;如果没有,则创建一个新实例并返回。
- 通过 getInstance() 方法来访问该类的唯一实例。
▷ 示例
public class Singleton {
// 声明一个私有的静态变量,用于保存唯一实例
private static Singleton uniqueInstance;
// 私有构造函数,防止外部直接实例化
private Singleton() {
// 这里可以进行一些初始化操作
}
// 提供一个公共的静态方法来获取唯一实例
public static synchronized Singleton getInstance() {
// 如果实例不存在,创建一个新实例
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
// 返回唯一实例
return uniqueInstance;
}
// 这里可以添加其他方法和属性
public void showMessage() {
System.out.println("Hello, I am a Singleton!");
}
}
⚪适用性
- 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
- 当这个唯一实例应该是通过子类化可扩展的,并且客户无须更改代码就能使用一个扩展的实例时。
⚪应用场景
- 数据库连接池: 在数据库访问时,维护一个数据库连接池的单例可以提高性能,避免频繁创建和销毁连接。
- 日志管理: 单例模式可以用于记录应用程序的日志,以确保所有日志消息都写入同一个文件或输出流。
- 线程池: 一些应用程序需要管理一个线程池,确保所有任务都由同一个线程池执行。
- 缓存管理: 单例模式可以用于管理应用程序中的缓存,以确保缓存的一致性和有效性。
- 配置管理: 在某些情况下,需要一个单例来管理应用程序的配置信息,以便在整个应用程序中共享这些信息。
⚪实际已有场景
- Spring Bean: 默认情况下,Spring 容器创建的 Bean 是单例的,这意味着在整个应用程序中只有一个实例。这在管理应用程序的组件和服务时非常有用。
- Spring MVC Controller: Spring MVC 中的控制器通常是单例的,因为它们处理来自多个客户端的请求。这确保了每个请求都由同一个控制器实例处理。
- Spring Boot Service 和 Component: 在 Spring Boot 应用程序中,使用 @Service 和 @Component 注解标记的类通常是单例的,它们用于提供各种服务和组件。
- Spring事务管理: Spring 的事务管理器通常也是单例的,确保了事务管理的一致性。

浙公网安备 33010602011771号