Java 实现:用饿汉与懒汉单例模式确保无论在哪看到的都是同一个月亮
好的,下面是一个使用单例模式实现的例子,分别展示了饿汉单例模式和懒汉单例模式。我们将创建一个 `Moon` 类来表示月亮,并确保无论在哪里调用,返回的都是同一个 `Moon` 实例。 饿汉单例模式 ```java public class Moon { // 在类加载时就创建实例 private static final Moon INSTANCE = new Moon(); // 月亮的直径 private final double diameter = 3476.28; // 私有构造函数,防止外部实例化 private Moon() { // 可以在这里进行一些初始化操作 } // 提供一个全局访问点 public static Moon getInstance() { return INSTANCE; } // 获取月亮的直径 public double getDiameter() { return diameter; } } ``` 懒汉单例模式 ```java public class Moon { // 延迟初始化实例 private static Moon instance; // 月亮的直径 private final double diameter = 3476.28; // 私有构造函数,防止外部实例化 private Moon() { // 可以在这里进行一些初始化操作 } // 提供一个全局访问点,线程安全 public static synchronized Moon getInstance() { if (instance == null) { instance = new Moon(); } return instance; } // 获取月亮的直径 public double getDiameter() { return diameter; } } ``` 测试类 ```java public class MoonTest { public static void main(String[] args) { // 测试饿汉单例模式 Moon moon1 = Moon.getInstance(); Moon moon2 = Moon.getInstance(); System.out.println("饿汉单例模式测试:"); System.out.println("月亮1: " + moon1); System.out.println("月亮2: " + moon2); System.out.println("月亮1和月亮2是否相同: " + (moon1 == moon2)); System.out.println("月亮的直径: " + moon1.getDiameter()); // 测试懒汉单例模式 Moon moon3 = Moon.getInstance(); Moon moon4 = Moon.getInstance(); System.out.println("\n懒汉单例模式测试:"); System.out.println("月亮3: " + moon3); System.out.println("月亮4: " + moon4); System.out.println("月亮3和月亮4是否相同: " + (moon3 == moon4)); System.out.println("月亮的直径: " + moon3.getDiameter()); } } ``` 运行结果 运行上述测试类,输出结果如下: ``` 饿汉单例模式测试: 月亮1: Moon@<hashcode> 月亮2: Moon@<hashcode> 月亮1和月亮2是否相同: true 月亮的直径: 3476.28 懒汉单例模式测试: 月亮3: Moon@<hashcode> 月亮4: Moon@<hashcode> 月亮3和月亮4是否相同: true 月亮的直径: 3476.28 ``` 从输出结果可以看出,无论是饿汉单例模式还是懒汉单例模式,两次获取的 `Moon` 实例都是相同的,即无论在哪里调用,返回的都是同一个月亮。 ######[AI写代码神器 | 727点数解答 | 2024-10-24 16:27:18]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)436
- 小a挑战:在小写字母串中找含“bolema”子序列的最短子串长度 (字节豆包 | 188点数解答 | 2024-11-15 20:51:47)328
- 求解含“bolema”子序列的最短子串长度问题(GPT | 161点数解答 | 2024-11-15 20:52:38)273
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)333
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1226
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)345
- C++ 实现:快速判断正整数是否为“超级整数”(字节豆包 | 239点数解答 | 2025-11-10 18:52:28)110
- C++实现:判断正整数是否为“超级整数”(字节豆包 | 242点数解答 | 2025-11-10 20:27:49)156
- P2185判断质数问题的C++代码实现(字节豆包 | 396点数解答 | 2026-03-22 16:54:08)35
- Java 继承实现:重温经典剪刀石头布游戏(字节豆包 | 451点数解答 | 2024-10-20 19:57:58)482