当我们私有化构造方法后,确实会禁止外部代码使用new关键字来创建该类的实例。但是,我们仍然可以通过其他方式来控制该类的实例化过程,从而达到单例模式的目的。
常用的两种方式是:
- 定义一个静态方法来返回该类的唯一实例。这个静态方法通常被称为“工厂方法”,它负责在需要时创建唯一的实例,并在以后的调用中重复使用该实例。在这种情况下,我们可以在类内部维护一个静态成员变量来保存该类的唯一实例,然后在工厂方法中判断该实例是否已经存在,如果存在则直接返回它,否则再创建一个新实例并返回。
示例代码如下:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 使用枚举类型来实现单例模式。枚举类型中的每个枚举常量都是该类型的唯一实例,并且在Java中保证只会被初始化一次,因此可以用枚举类型来实现单例模式。
示例代码如下:
public enum Singleton {
INSTANCE;
// 可以在枚举中定义其他成员变量和方法
}
在这种方式下,我们可以通过Singleton.INSTANCE来访问该类的唯一实例。