使用观察者模式,实现如下业务场景,一栋3层的楼房,每层有一个保安,负责本楼层的相
时间: 2023-09-18 12:15:54 浏览: 131
关监控。现在需要一个总控制中心,可以实时监控每层楼的监控情况。
首先,我们需要定义一个抽象观察者接口,用于定义观察者需要实现的方法:
```java
public interface Observer {
void update(boolean isWorking);
}
```
其中,`update` 方法用于更新观察者的状态,`isWorking` 参数表示该保安是否正在工作。
然后,我们需要定义一个具体观察者类 `SecurityGuard`,用于表示每个保安:
```java
public class SecurityGuard implements Observer {
private int floorNum;
public SecurityGuard(int floorNum) {
this.floorNum = floorNum;
}
@Override
public void update(boolean isWorking) {
if (isWorking) {
System.out.println("第" + floorNum + "层保安正在工作");
} else {
System.out.println("第" + floorNum + "层保安停止工作");
}
}
}
```
其中,`floorNum` 表示该保安所在楼层,`update` 方法根据参数更新该保安的状态。
接下来,我们需要定义一个抽象主题接口 `Subject`,用于定义主题需要实现的方法:
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(boolean isWorking);
}
```
其中,`registerObserver` 方法用于注册观察者,`removeObserver` 方法用于移除观察者,`notifyObservers` 方法用于通知所有观察者。
最后,我们需要定义一个具体主题类 `ControlCenter`,用于表示总控制中心:
```java
import java.util.ArrayList;
import java.util.List;
public class ControlCenter implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(boolean isWorking) {
for (Observer observer : observers) {
observer.update(isWorking);
}
}
}
```
其中,`observers` 用于保存所有观察者,`registerObserver` 方法将观察者添加到列表中,`removeObserver` 方法将观察者从列表中移除,`notifyObservers` 方法通知所有观察者。
现在,我们可以使用这些类来实现业务场景了。首先,我们创建一个控制中心和三个保安:
```java
ControlCenter center = new ControlCenter();
SecurityGuard guard1 = new SecurityGuard(1);
SecurityGuard guard2 = new SecurityGuard(2);
SecurityGuard guard3 = new SecurityGuard(3);
```
然后,我们将三个保安注册到控制中心中:
```java
center.registerObserver(guard1);
center.registerObserver(guard2);
center.registerObserver(guard3);
```
接下来,我们可以模拟保安开始工作和停止工作的情况:
```java
center.notifyObservers(true); // 所有保安开始工作
center.notifyObservers(false); // 所有保安停止工作
```
运行程序,可以看到如下输出:
```
第1层保安正在工作
第2层保安正在工作
第3层保安正在工作
第1层保安停止工作
第2层保安停止工作
第3层保安停止工作
```
这说明所有保安的状态都被成功更新了。这就是使用观察者模式来实现业务场景的完整代码。