这篇文章是作者分享的 Java 练习题中的第 64 题,通过解答这道题目可以提高 Java 编程的能力。下面我们按照标准的 markdown 格式文本进行讲解。
标题
Java日常练习题,每天进步一点点(64)
任务描述
这道练习题要求实现一个单例模式。具体要求如下:
- 单例类的构造方法私有化,不允许从外界创建对象;
- 提供静态方法获取该单例对象;
- 多线程环境下,该单例对象依然只会有一个实例。
解题思路
我们可以使用饿汉式或懒汉式两种常见的单例模式实现方式来解决这道题目。
饿汉式单例类:
public class Singleton {
// 类加载时就创建唯一实例,在类装载的时候就完成实例化,避免了线程同步问题。
private static final Singleton instance = new Singleton();
// 构造方法私有化,不允许从外界创建对象;
private Singleton() {
}
// 提供静态方法获取该单例对象;
public static Singleton getInstance() {
return instance;
}
}
懒汉式单例类:
public class Singleton {
// 在第一次使用时创建唯一实例,需要时再创建,避免了无用的实例化,节约了内存空间。
private static Singleton instance;
// 构造方法私有化,不允许从外界创建对象;
private Singleton() {
}
// 提供静态方法获取该单例对象,需要时创建该实例。
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
两种实现方式各有优缺点,可以根据具体的业务场景选择合适的实现方式。
示例
我们可以编写测试程序来验证实现的单例模式是否满足要求。
public class SingletonTest {
public static void main(String[] args) {
// 饿汉式单例类测试
Singleton1 s1 = Singleton1.getInstance();
Singleton1 s2 = Singleton1.getInstance();
System.out.println(s1 == s2);
// 懒汉式单例类测试
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
System.out.println(s3 == s4);
}
}
输出结果:
true
true
结果证明两个类的单例对象完全相同。
至此,本题目的解答就结束了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java日常练习题,每天进步一点点(64) - Python技术站