在Java编程中,如何设计一个名为Room的类来表示包含四个相邻房间(包括同学和老师这类不同类型的实体),并实现一个进出房间的方法,同时确保类的封装性以及对象间的一致关联性?请提供相关的代码示例和面向对象设计原则的应用说明。
时间: 2024-11-04 10:14:39 浏览: 15
RoomDatabase:在这个应用程序中,我使用了Room数据库
在Java中,我们可以设计一个名为`Room`的类来表示房间,并使用`enum`类型来代表不同类型的角色,如学生和教师。同时,为了保证封装性和一致性关联性,我们采用访问修饰符、属性隐藏和依赖倒置原则。
首先,定义`Role`枚举类型来表示角色:
```java
public enum Role {
STUDENT, TEACHER
}
```
然后创建`Room`类,包含房间ID、角色数组和当前角色索引,以及进出房间的方法:
```java
import java.util.ArrayList;
import java.util.List;
public class Room {
private int roomId;
private List<Role> occupants;
private int currentOccupantIndex;
public Room(int roomId) {
this.roomId = roomId;
this.occupants = new ArrayList<>();
this.currentOccupantIndex = -1; // 表示房间为空
}
// 封装性:设置角色的方法
public void addOccupant(Role role) {
if (currentOccupantIndex < occupants.size() - 1) { // 如果还有空位
occupants.add(currentOccupantIndex + 1, role);
currentOccupantIndex++;
} else {
System.out.println("Room is full.");
}
}
// 封装性:获取下一个空闲房间的方法
public boolean leaveRoom(Role role) {
if (role == occupants.get(currentOccupantIndex)) {
occupants.remove(currentOccupantIndex);
currentOccupantIndex--;
return true; // 成功离开房间
} else {
System.out.println("You are not the occupant of this room.");
return false;
}
}
// 对象间的一致关联性:通过角色索引来关联不同角色的对象
public String getOccupantInfo() {
if (currentOccupantIndex != -1) {
return "Room " + roomId + ": Occupied by a " + occupants.get(currentOccupantIndex);
} else {
return "Room " + roomId + ": Empty.";
}
}
// 依赖倒置原则:类的实现应该尽可能独立于它所使用的其他类
public static void main(String[] args) {
Room room = new Room(1);
room.addOccupant(Role.STUDENT); // 添加学生
room.addOccupant(Role.TEACHER); // 添加教师
System.out.println(room.getOccupantInfo());
room.leaveRoom(Role.STUDENT); // 学生离开
System.out.println(room.getOccupantInfo());
}
}
```
在这个例子中,我们遵循了封装原则,通过公有方法暴露操作房间的行为(添加和移除角色),而内部细节(角色列表和索引)则是私有的。依赖倒置原则体现在主函数中,我们让`Room`类的实例管理自身的状态,而不是直接依赖于特定的角色类。
阅读全文