7. 我们私有化构造方法,外部代码不能创建改实例的对象,此时我们应该怎办

67 阅读1分钟

当我们私有化构造方法后,确实会禁止外部代码使用new关键字来创建该类的实例。但是,我们仍然可以通过其他方式来控制该类的实例化过程,从而达到单例模式的目的。

常用的两种方式是:

  1. 定义一个静态方法来返回该类的唯一实例。这个静态方法通常被称为“工厂方法”,它负责在需要时创建唯一的实例,并在以后的调用中重复使用该实例。在这种情况下,我们可以在类内部维护一个静态成员变量来保存该类的唯一实例,然后在工厂方法中判断该实例是否已经存在,如果存在则直接返回它,否则再创建一个新实例并返回。

示例代码如下:

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  1. 使用枚举类型来实现单例模式。枚举类型中的每个枚举常量都是该类型的唯一实例,并且在Java中保证只会被初始化一次,因此可以用枚举类型来实现单例模式。

示例代码如下:

public enum Singleton {
    INSTANCE;
    // 可以在枚举中定义其他成员变量和方法
}

在这种方式下,我们可以通过Singleton.INSTANCE来访问该类的唯一实例。