酷代码 AI
菜单
服务商

(饿汉单例模式)(懒汉单例模式)世界上只有一个月亮,月亮的直径是3476.28km,无论在 中国还是在美国,我们所看到的都是同一个月亮。使用单例模式实现无论我们在哪所看到的月亮是同一个月亮。

单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。根据你的要求,我将分别用饿汉单例模式和懒汉单例模式来实现“月亮”这个类。 饿汉单例模式 饿汉单例模式在类加载时就创建了单例对象,因此它是线程安全的,但可能会造成资源浪费(如果对象从未被使用)。 ```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 ``` 这样,无论在哪里,我们都确保看到的是同一个月亮。 [2024-10-24 16:20:36 | AI写代码神器 | 656点数解答]

相关提问
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]