Java设计模式中的单例模式
单例模式是一种创建型设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。
单例模式的两种不同方式
饿汉式单例模式:
public class SingletonEager {
private static final SingletonEager instance = new SingletonEager();
private SingletonEager() {
// 私有构造方法,防止外部实例化
}
public static SingletonEager getInstance() {
return instance;
}
}
懒汉式单例模式:
public class SingletonLazy {
private static SingletonLazy instance;
private SingletonLazy() {
// 私有构造方法,防止外部实例化
}
public static synchronized SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
区别:
- 饿汉式单例模式(Eager Initialization): 在类加载时就创建实例,因此不存在线程安全问题。但是可能会造成资源浪费,因为不管是否使用该实例,都会在类加载时创建。
-
懒汉式单例模式(Lazy Initialization): 在第一次使用时才创建实例,避免了资源浪费,但需要考虑线程安全问题。上述代码通过在
getInstance
方法上添加synchronized
关键字来解决线程安全问题,但会影响性能。
单例模式的具体应用场景
单例模式的应用场景包括:文章来源:https://www.toymoban.com/news/detail-820087.html
- 数据库连接池: 保证多个线程共享一个数据库连接池,避免重复创建连接,提高性能。
- 配置管理器: 保证在整个应用程序中只有一个配置管理器,确保配置信息的一致性。
- 日志管理器: 保证在整个应用程序中只有一个日志管理器,确保日志的一致性。
举例说明:文章来源地址https://www.toymoban.com/news/detail-820087.html
public class DatabaseConnectionPool {
private static final DatabaseConnectionPool instance = new DatabaseConnectionPool();
private DatabaseConnectionPool() {
// 私有构造方法,防止外部实例化
}
public static DatabaseConnectionPool getInstance() {
return instance;
}
// 其他数据库连接池相关方法...
}
单例模式的优点
- 全局唯一实例: 确保一个类只有一个实例,方便对该实例的管理和控制。
- 延迟加载: 懒汉式单例模式可以在需要时才创建实例,避免了资源浪费。
- 线程安全(部分实现): 饿汉式单例模式在类加载时就创建实例,不存在线程安全问题;懒汉式单例模式通过加锁等机制可以保证在多线程环境下的安全访问。
- 提供全局访问点: 全局访问点使得程序可以方便地访问单例对象,统一管理资源或状态。
到了这里,关于Java设计模式中的单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!