版权声明:随意转载 https://blog.csdn.net/bigcupwater/article/details/75661226
单例类
类的构造器为public修饰,其他类(包括本身)可以自由创建该类的对象,系统性能可能因此下降(频繁的创建对象、回收对象加大了系统开销),某些时候我们只想实例化该类的一个实例,这个时候把该类写成单例类最好不过。
创建过程
- 避免其他类创建该对象,把该类的构造方法修饰为 private 型,把构造器对外隐藏起来。
- 构造器隐藏起来,我们需要创建一个可以访问( public )的方法调用构造方法创建对象。在调用该方法之前还没有对象存在,所以把此方法写为类方法(用 static 修饰),在未实例化对象之前调用。在此称为A方法。
- 因为只允许创建一个对象,A方法内部需要保证我们一定只创建一个对象。在创建对象之前我们需要判断是否创建过对象,所以第一次创建时应该保存我们创建的对象,也就是说需要定义一个类变量保存第一次创建的对象。同A方法,该变量也应该用 static 修饰, 为了保证变量的封装性,变量本身也用 private 修饰。在此称为B。
- 至此,A方法内部需要判定 B 是否为空,若为空则创建并存于B,不为空则返回B本身的值。
- 完成单例类的创建。
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,因为他们实际是一个对象
}
}