用饿汉与懒汉单例模式实现:无论中美,所见皆是同一个月亮!
单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。根据你的要求,我将分别用饿汉单例模式和懒汉单例模式来实现“月亮”这个类。 饿汉单例模式 饿汉单例模式在类加载时就创建了单例对象,因此它是线程安全的,但可能会造成资源浪费(如果对象从未被使用)。 ```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; } // 其他方法... } ``` 懒汉单例模式 懒汉单例模式在第一次使用时才创建单例对象,因此可以节省资源,但需要考虑线程安全问题。这里使用双重检查锁定(Double-Check Locking)来保证线程安全。 ```java public class Moon { // 使用 volatile 关键字确保多线程环境下的可见性和有序性 private static volatile Moon instance; // 月亮的直径 private final double diameter = 3476.28; // 私有构造方法,防止外部实例化 private Moon() { // 可以在这里进行一些初始化操作 } // 提供一个全局访问点 public static Moon getInstance() { if (instance == null) { synchronized (Moon.class) { if (instance == null) { instance = new Moon(); } } } return instance; } // 获取月亮的直径 public double getDiameter() { return diameter; } // 其他方法... } ``` 使用示例 无论在中国还是在美国,我们看到的都是同一个 `Moon` 对象: ```java public class Main { public static void main(String[] args) { Moon moonInChina = Moon.getInstance(); Moon moonInUSA = Moon.getInstance(); System.out.println("月亮的直径: " + moonInChina.getDiameter() + " km"); System.out.println("月亮的直径: " + moonInUSA.getDiameter() + " km"); // 检查是否是同一个对象 System.out.println("在中国和美国看到的是同一个月亮吗? " + (moonInChina == moonInUSA)); } } ``` 输出结果将会是: ``` 月亮的直径: 3476.28 km 月亮的直径: 3476.28 km 在中国和美国看到的是同一个月亮吗? true ``` 这样,无论在哪里,我们都确保看到的是同一个月亮。 ######[AI写代码神器 | 656点数解答 | 2024-10-24 16:20:36]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- 深度解析:Vue中MVVM模式的组成、原理与双向数据绑定优势 (阿里通义 | 249点数解答 | 2023-11-09 00:56:24)276
- Android开发:Kotlin实现Builder模式示例及优势解析(百度文心 | 456点数解答 | 2023-11-09 17:29:15)259
- 工程师必知:PO模式与Page Factory的深度解析(百度文心 | 132点数解答 | 2023-11-09 18:33:18)293
- 2026 年苍溪县印刷企业年报工作:现状、问题与未来举措(字节豆包 | 1245点数解答 | 2026-03-09 12:55:05)27
- Python实现整数序列奇偶项输出(字节豆包 | 346点数解答 | 2026-03-15 02:01:10)38
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)276
- JavaScript 开发:用 Animation 实现自定义动画的简易教程 (阿里通义 | 333点数解答 | 2023-11-09 01:50:07)266
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)496
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)386
- Vue.js 与 Matter.js 碰撞:轻松实现物理模拟全攻略 (讯飞星火 | 522点数解答 | 2024-05-29 22:26:06)453