用java写一段代码,完成设计一个门类Door,可以实现基本的开关行为(方法),现在要增加一个功能,具有报警和照相功能。以及说明如何对类Door进行修改更合适? 【说明】要有文字解释为什么如此修改
时间: 2024-03-17 10:44:44 浏览: 48
下面是一个示例代码,实现了Door类的基本开关行为,以及增加了报警和照相功能:
```java
public class Door {
private boolean isOpen;
public void open() {
isOpen = true;
System.out.println("门已打开");
}
public void close() {
isOpen = false;
System.out.println("门已关闭");
}
public void alarm() {
System.out.println("报警器已启动");
}
public void takePhoto() {
System.out.println("照相机已拍照");
}
}
```
在这个示例中,我们将报警和照相功能分别作为Door类的两个新方法加入,实现了Door类的功能扩展。但是这样做违反了单一职责原则,因为Door类不应该同时负责门的开关和报警照相功能。
更合适的做法是将报警和照相功能分别封装在单独的类中,并通过组合或继承的方式与Door类关联,如:
```java
public interface Alarm {
void alarm();
}
public interface Camera {
void takePhoto();
}
public class Door {
private boolean isOpen;
public void open() {
isOpen = true;
System.out.println("门已打开");
}
public void close() {
isOpen = false;
System.out.println("门已关闭");
}
}
public class AlarmDoor extends Door implements Alarm {
@Override
public void alarm() {
System.out.println("报警器已启动");
}
}
public class CameraDoor extends Door implements Camera {
@Override
public void takePhoto() {
System.out.println("照相机已拍照");
}
}
```
在这个示例中,我们创建了Alarm和Camera两个接口,分别实现报警和照相功能。然后创建了AlarmDoor和CameraDoor两个类,分别继承自Door类,并实现对应的接口。这样,我们可以按照需求选择AlarmDoor或CameraDoor类,并实现相应的功能扩展,同时保持Door类的单一职责原则。