/** * 智能保险柜类 * 实现了Lockable、Monitored和Alarmable三个接口,具有完整的安全功能 */ public class SmartSafe implements Lockable, Monitored, Alarmable { private String name; private boolean locked; private boolean isMonitoring; private int alarmSensitivity; private boolean isAlarmTriggered; /** * 构造函数 * @param name 保险柜名称 */ public SmartSafe(String name) { this.name = name; this.locked = true; // 默认锁定状态 this.isMonitoring = true; // 默认开启监控 this.alarmSensitivity = 8; // 默认高灵敏度 this.isAlarmTriggered = false; } @Override public void lock() { if (!locked) { locked = true; System.out.println(name + " 已锁定"); } else { System.out.println(name + " 已经是锁定状态"); } } @Override public void unlock() { if (locked) { locked = false; System.out.println(name + " 已解锁"); // 解锁时可能触发监控提醒 if (isMonitoring) { System.out.println(name + " 监控提醒: 保险柜已被解锁"); } } else { System.out.println(name + " 已经是解锁状态"); } } @Override public boolean isLocked() { return locked; } @Override public void startMonitoring() { if (!isMonitoring) { isMonitoring = true; System.out.println(name + " 开始监控"); } else { System.out.println(name + " 已经在监控中"); } } @Override public void stopMonitoring() { if (isMonitoring) { isMonitoring = false; System.out.println(name + " 停止监控"); } else { System.out.println(name + " 已经停止监控"); } } @Override public String getMonitoringStatus() { return name + " 监控状态: " + (isMonitoring ? "正在监控" : "未监控") + ", 锁定状态: " + (locked ? "已锁定" : "未锁定"); } @Override public void triggerAlarm() { if (!isAlarmTriggered) { isAlarmTriggered = true; System.out.println(name + " 报警已触发! 保险柜可能遭到入侵! 灵敏度级别: " + alarmSensitivity); } else { System.out.println(name + " 报警已经在触发状态"); } } @Override public void stopAlarm() { if (isAlarmTriggered) { isAlarmTriggered = false; System.out.println(name + " 报警已停止"); } else { System.out.println(name + " 报警已经停止"); } } @Override public void setAlarmSensitivity(int level) { if (level >= 1 && level <= 10) { this.alarmSensitivity = level; System.out.println(name + " 报警灵敏度已设置为: " + level); } else { System.out.println("灵敏度必须在1-10之间"); } } /** * 获取保险柜名称 * @return 保险柜名称 */ public String getName() { return name; } }