以下是关于“单例(java)”的完整攻略,包括基本概念、使用方法和两个示例。
基本概念
单例是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在Java中,单例可以通过私有构造函数、静态变量和静态方法实现。
使用方法
以下是使用单例的方法:
- 私有构造函数:将类的构造函数设为私有,以防止其他类实例化该类。
- 静态变量:在类中定义一个静态变量,用于存储该类的唯一实例。
- 静态方法:在类中定义一个静态方法,用于获取该类的唯一实例。
以下是两个示例:
示例一:饿汉式单例
以下是饿汉式单例的示例:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
在这个示例中,Singleton类的构造函数是私有的,所以其他类不能实例化Singleton类。Singleton类中定义了一个静态变量instance,用于存储Singleton类的唯一实例。Singleton类中还定义了一个静态方法getInstance(),用于获取Singleton类的唯一实例。在getInstance()方法中,如果instance为null,则创建一个新的Singleton实例并将其赋值给instance,否则直接返回instance。
示例二:懒汉式单例
以下是懒汉式单例的示例:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
在这个示例中,Singleton类的构造函数是私有的,所以其他类不能实例化Singleton类。Singleton类中定义了一个静态变量instance,用于存储Singleton类的唯一实例。Singleton类中还定义了一个静态方法getInstance(),用于获取Singleton类的唯一实例。在getInstance()方法中,如果instance为null,则创建一个新的Singleton实例并将其赋值给instance,否则直接返回instance。由于getInstance()方法是同步的,所以可以保证在多线程环境下只有一个线程可以创建Singleton实例。
结论
单例是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在Java中,单例可以通过私有构造函数、静态变量和静态方法实现。可以使用示例学习和理解单例的使用方法。