酷代码 AI
菜单
服务商

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

好的,下面是一个使用单例模式实现的例子,分别展示了饿汉单例模式和懒汉单例模式。我们将创建一个 `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` 实例都是相同的,即无论在哪里调用,返回的都是同一个月亮。 [2024-10-24 16:27:18 | AI写代码神器 | 727点数解答]

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