JAVA: 使用单例模式设计实现地球类(Earth)和测试类(定义一个地球类并实例化)
时间: 2023-06-03 08:03:55 浏览: 51
好的,我可以回答这个问题。你可以使用以下代码实现单例模式设计的Earth类:
```
public class Earth {
private static Earth instance = null;
private Earth() {
// 构造方法私有化,防止外部创建实例
}
public static Earth getInstance() {
if (instance == null) {
instance = new Earth();
}
return instance;
}
// 其他方法和属性...
}
```
然后在测试类中可以通过以下代码来实例化地球类:
```
Earth earth = Earth.getInstance();
```
这样就可以保证地球类只有一个实例。
相关问题
用java创建一个地球类(两种单例模式) 属性:半径、质量 方法:定义构造方式,并在构造方法中打印“地球诞生了” 定义一个自转的方法:输出地球自传中 定义一个公转的方法:输出地球公转中 编写测试类,新建三个地球,看是否是同一个地球。
下面是两种不同的单例模式实现地球类的示例代码:
1. 饿汉式单例模式
```
public class Earth {
private static final Earth instance = new Earth();
private final double radius;
private final double mass;
// 私有构造方法
private Earth() {
System.out.println("地球诞生了");
this.radius = 6371.0;
this.mass = 5.97E24;
}
// 自转方法
public void rotate() {
System.out.println("地球自传中");
}
// 公转方法
public void revolve() {
System.out.println("地球公转中");
}
// 获取单例对象的方法
public static Earth getInstance() {
return instance;
}
}
```
测试类:
```
public class TestEarth {
public static void main(String[] args) {
Earth earth1 = Earth.getInstance();
Earth earth2 = Earth.getInstance();
Earth earth3 = Earth.getInstance();
System.out.println(earth1 == earth2); // true
System.out.println(earth2 == earth3); // true
earth1.rotate();
earth2.revolve();
}
}
```
2. 懒汉式单例模式
```
public class Earth {
private volatile static Earth instance = null;
private final double radius;
private final double mass;
// 私有构造方法
private Earth() {
System.out.println("地球诞生了");
this.radius = 6371.0;
this.mass = 5.97E24;
}
// 自转方法
public void rotate() {
System.out.println("地球自传中");
}
// 公转方法
public void revolve() {
System.out.println("地球公转中");
}
// 获取单例对象的方法
public static Earth getInstance() {
if (instance == null) {
synchronized (Earth.class) {
if (instance == null) {
instance = new Earth();
}
}
}
return instance;
}
}
```
测试类和上面的一致。
创建一个地球类(两种单例模式) 属性:半径、质量 方法:定义构造方式,并在构造方法中打印“地球诞生了” 定义一个自转的方法:输出地球自传中 定义一个公转的方法:输出地球公转中 编写测试类,新建三个地球,看是否是同一个地球。
以下是两种不同的单例模式实现地球类:
1. 饿汉式单例模式
```java
public class Earth {
private static final Earth instance = new Earth();
private final double radius;
private final double mass;
private Earth() {
System.out.println("地球诞生了");
radius = 6371;
mass = 5.97e24;
}
public static Earth getInstance() {
return instance;
}
public void rotate() {
System.out.println("地球自传中");
}
public void revolve() {
System.out.println("地球公转中");
}
}
```
2. 懒汉式单例模式
```java
public class Earth {
private static Earth instance;
private final double radius;
private final double mass;
private Earth() {
System.out.println("地球诞生了");
radius = 6371;
mass = 5.97e24;
}
public static synchronized Earth getInstance() {
if (instance == null) {
instance = new Earth();
}
return instance;
}
public void rotate() {
System.out.println("地球自传中");
}
public void revolve() {
System.out.println("地球公转中");
}
}
```
测试类:
```java
public class EarthTest {
public static void main(String[] args) {
Earth earth1 = Earth.getInstance();
Earth earth2 = Earth.getInstance();
Earth earth3 = Earth.getInstance();
System.out.println(earth1 == earth2); // true
System.out.println(earth2 == earth3); // true
earth1.rotate(); // 地球自传中
earth2.revolve(); // 地球公转中
earth3.rotate(); // 地球自传中
}
}
```
以上两种单例模式实现都可以保证只有一个地球实例被创建,且在创建时打印“地球诞生了”。测试类创建了三个地球实例,但是它们都是同一个实例,所以输出结果都是“地球自传中”和“地球公转中”。