单例类的创建过程

版权声明:随意转载 https://blog.csdn.net/bigcupwater/article/details/75661226

单例类

  类的构造器为public修饰,其他类(包括本身)可以自由创建该类的对象,系统性能可能因此下降(频繁的创建对象、回收对象加大了系统开销),某些时候我们只想实例化该类的一个实例,这个时候把该类写成单例类最好不过。

创建过程

  1. 避免其他类创建该对象,把该类的构造方法修饰为 private 型,把构造器对外隐藏起来。
  2. 构造器隐藏起来,我们需要创建一个可以访问( public )的方法调用构造方法创建对象。在调用该方法之前还没有对象存在,所以把此方法写为类方法(用 static 修饰),在未实例化对象之前调用。在此称为A方法。
  3. 因为只允许创建一个对象,A方法内部需要保证我们一定只创建一个对象。在创建对象之前我们需要判断是否创建过对象,所以第一次创建时应该保存我们创建的对象,也就是说需要定义一个类变量保存第一次创建的对象。同A方法,该变量也应该用 static 修饰, 为了保证变量的封装性,变量本身也用 private 修饰。在此称为B。
  4. 至此,A方法内部需要判定 B 是否为空,若为空则创建并存于B,不为空则返回B本身的值。
  5. 完成单例类的创建。
public class LonelyClass {
    // 3. 创建变量存储第一次实例化的对象
    private static LonelyClass lc;

    // 1. 创建私有构造方法
    private LonelyClass() {

    }

    // 2. 创建方法调用构造方法,创建实例。返回值类型为类本身( LonelyClass )
    public static LonelyClass getMyClass() {

        // 4. 判断是否创建过
        if (lc == null) {
            lc = new LonelyClass();
        }
        return lc;
    }

    public static void main(String[] args) {
        // 5. 单例类创建完成 测试
        LonelyClass test1 = LonelyClass.getMyClass();
        LonelyClass test2 = LonelyClass.getMyClass();

        System.out.println(test1 == test2);  // true,因为他们实际是一个对象
    }
}

猜你喜欢

转载自blog.csdn.net/bigcupwater/article/details/75661226