某企业有一火灾预警中心,火警探测器探测到火情信号后,会自动拨号110火警,并发短信给安全生产负责人和总经理。请利用某设计模式实现此情境,要求画出UML类图,并写出源代码,并测试。
时间: 2024-10-13 10:02:41 浏览: 0
这里可以应用观察者模式(Observer Pattern),它非常适合这种场景,因为当发生火警时,多个观察者(比如报警系统、安全生产负责人和总经理)需要得到通知。
首先,我们来绘制UML类图:
1. **Subject (主题) - 火警探测器**
- 发送火警信号
- 添加和移除Observer (观察者)
2. **Observer (观察者) - 安全生产负责人**
- 更新方法:接收火警信息并执行相应操作
3. **Observer (观察者) - 总经理**
- 更新方法:接收火警信息并执行相应操作
4. **AlarmCenter (预警中心)**
- 负责维护一个Observer列表
- 当接收到火警信号时,通知所有观察者
以下是简单的Java代码实现:
```java
// Subject (火警探测器)
class FireDetector {
private List<Observer> observers;
public void detectFire() {
// 模拟火警触发
System.out.println("Detected fire, notifying observers...");
for (Observer observer : observers) {
observer.update();
}
}
public void addObserver(Observer observer) {
if (observer != null) {
observers.add(observer);
}
}
public void removeObserver(Observer observer) {
if (observer != null && observers.contains(observer)) {
observers.remove(observer);
}
}
}
// Observer (观察者)
interface Observer {
void update();
}
// 实现安全生产负责人的观察者
class SafetyManager implements Observer {
@Override
public void update() {
System.out.println("Safety Manager received the alarm.");
// 发送短信或者执行其他动作
}
}
// 实现总经理的观察者
class CEO implements Observer {
@Override
public void update() {
System.out.println("CEO received the alarm.");
// 打电话或者执行其他动作
}
}
// 预警中心
public class AlarmCenter {
private FireDetector detector;
public AlarmCenter(FireDetector detector) {
this.detector = detector;
}
public void addObservers(Observer[] observers) {
for (Observer obs : observers) {
detector.addObserver(obs);
}
}
}
```
测试部分:
```java
public static void main(String[] args) {
FireDetector detector = new FireDetector();
AlarmCenter center = new AlarmCenter(detector);
SafetyManager manager = new SafetyManager();
CEO ceo = new CEO();
center.addObservers(new Observer[]{manager, ceo});
// 模拟火警发生
detector.detectFire();
}
```
运行上述代码,将看到"Detected fire, notifying observers..."以及两位观察者的更新消息。