单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。
事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。
在 Java中,单例设计模式分类两种:
- 饿汉式:类加载就会导致该单实例对象被创建
- 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建
在 Java中,我们可以用多种方法来实现单例模式:
1. 饿汉式-方式1(静态变量方式)
/**
* 饿汉式
* 静态变量创建类的对象
*/
public class Singleton {
// 私有构造方法
private Singleton() {
}
// 在成员位置创建该类的对象
private static Singleton instance = new Singleton();
// 对外提供静态方法获取该对象
public static Singleton getInstance() {
return instance;
}
}
说明:该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的对象instance。 instance对象是随着类的加载而创建的。如果该对象足够大的话,而一直没有使用就会造成内存 的浪费。
2. 饿汉式-方式2(静态代码块方式)
/**
* 恶汉式
* 在静态代码块中创建该类对象
*/
public class Singleton {
// 私有构造方法
private Singleton() {
}
// 在成员位置创建该类的对象
private static Singleton instance;
sta

本文详细介绍了Java中单例模式的实现方式,包括饿汉式和懒汉式,以及它们各自的优缺点和线程安全性。重点讲解了双重检查锁和静态内部类这两种高效的线程安全单例模式,同时提到了枚举方式作为推荐的单例实现。

1340

被折叠的 条评论
为什么被折叠?



