观察者模式——例题
觀察者模式——例題
- 一、題目
- 二、代碼
- 1.監聽器 AlarmListener.java
- 2.報警器 Annunciator.java
- 3.警示燈 CautionLight.java
- 4.Gate.java
- 5.ExitGate.java
- 6.傳感器 Sensor.java
- 7.測試類 Main.java
- 三、運行結果
提示:以下是本篇文章正文內容,下面案例可供參考
一、題目
某公司擬開發一套機房監控系統,功能要求如下:
如果機房達到某一指定溫度,傳感器將作出反應,將信號傳遞給響應設備,如警示燈將閃爍、報警器將發出警報、安全門逃生門將自動開啟,隔熱門將自動關閉,每一種響應設備的行為由專門的程序來控制。為了支持將來引入新類型的響應設備,采用觀察者模式設計該系統。
(1)根據系統類圖,使用Java語言編碼。
(2)編寫測試類,當溫度高于40度時發出警報,當溫度低于40度時提示溫度正常。
二、代碼
1.監聽器 AlarmListener.java
代碼如下(示例):
public interface AlarmListener {public void alarm();}2.報警器 Annunciator.java
代碼如下(示例):
/*** 報警器*/ public class Annunciator implements AlarmListener{@Overridepublic void alarm() {System.out.println("溫度高于40度,發出警報!");} }3.警示燈 CautionLight.java
/*** 警示燈*/ public class CautionLight implements AlarmListener{@Overridepublic void alarm() {System.out.println("警示燈閃爍!");} }4.Gate.java
public class Gate {public void action(){}public void open(){System.out.println("安全門逃生門自動開啟!");}public void close(){System.out.println("隔熱門自動關閉!");}}5.ExitGate.java
public class ExitGate extends Gate implements AlarmListener{@Overridepublic void alarm() {open();close();} }6.傳感器 Sensor.java
/*** 傳感器*/ public class Sensor {private List<AlarmListener> alarmListenerLists = new ArrayList<AlarmListener>();//把需要監聽的設備加載進來public void attach(AlarmListener listener){alarmListenerLists.add(listener);}//解除綁定public void deattach(AlarmListener alarmListener){alarmListenerLists.remove(alarmListener);}//發出通知public void notify1(){for(AlarmListener alarmListener:alarmListenerLists){alarmListener.alarm();}}}7.測試類 Main.java
public class Main {public static void main(String[] args) {// write your code here//創建需要給到傳感器的設備Annunciator annunciator = new Annunciator();CautionLight cautionLight = new CautionLight();ExitGate exitGate = new ExitGate();//將需要監聽的設備給到傳感器Sensor sensor = new Sensor();sensor.attach(annunciator);sensor.attach(cautionLight);sensor.attach(exitGate);double temperature = 40; //設定溫度Scanner scanner = new Scanner(System.in);System.out.println("請輸入實時溫度:");//使用while循環不斷獲取實時溫度,當溫度高于40度時發出警報,當溫度低于40度時提示溫度正常while (scanner.hasNext()){String s = scanner.nextLine();Double realTime = Double.valueOf(s);if(realTime >= temperature){sensor.notify1();}else {System.out.println("溫度正常!");}}} }三、運行結果
總結
- 上一篇: WWW 2023 | 无图协同过滤
- 下一篇: 撄花树之恋