我是靠谱客的博主 独特大山,这篇文章主要介绍设计模式练习(17)——观察者模式,现在分享给大家,希望可以做个参考。

观察者模式

一、题目:

某公司欲开发一套机房监控系统,如果机房达到一定指定温度,传感器将作出反应,将信号传递给响应设备,如警示灯将闪烁,报警器将发出警报,安全逃生门将自动开启、隔热门将自动关闭,每一响应设备的行为右专门的程序来控制,为支持将来引入新类型的响应设备,用观察者模式设计该系统
(1)绘制观察者模式结构视图
(2)给出实例类图并实现代码

二、所用模式结构视图:

这里写图片描述

三、实例类图:

这里写图片描述

四、实例实现代码:

(因为区分,所以在类的前面加了Gj19)

警报危机监测

复制代码
1
2
3
4
5
6
7
8
9
10
package gjObserverPattern; /** * 警报危机监测 * * @author gong * */ public interface Gj19AlarmListener { public void doSomeThing();//警示灯将闪烁,报警器将发出警报,安全逃生门将自动开启、隔热门将自动关闭 }

警示灯

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package gjObserverPattern; /** * 警示灯 * @author gong * */ public class Gj19Light implements Gj19AlarmListener{ @Override public void doSomeThing() { light(); } public void light(){ System.out.println("警示灯闪烁....."); } }

报警器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package gjObserverPattern; /** * 报警器 * @author gong * */ public class Gj19Voice implements Gj19AlarmListener{ @Override public void doSomeThing() { alarm(); } public void alarm(){ System.out.println("报警器发出警报...."); } }

安全门

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package gjObserverPattern; /** * 安全门 * @author gong * */ public class Gj19Security implements Gj19AlarmListener{ @Override public void doSomeThing() { open(); } public void open(){ System.out.println("安全逃生门将自动开启....."); } }

隔热门

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package gjObserverPattern; /** * 隔热门 * @author gong * */ public class Gj19InsulatedDoor implements Gj19AlarmListener{ @Override public void doSomeThing() { close(); } public void close(){ System.out.println("隔热门将自动关闭...."); } }

传感器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package gjObserverPattern; import java.util.ArrayList; /** * 传感器 * @author gong */ public class Gj19Sensor { private double tem; private ArrayList<Gj19AlarmListener> alarmListeners = new ArrayList<Gj19AlarmListener>(); public void add(Gj19AlarmListener lisenter){ this.alarmListeners.add(lisenter); } public void remove(Gj19AlarmListener lisenter){ this.alarmListeners.remove(lisenter); } public void testAlarm(){ for(Gj19AlarmListener obj : alarmListeners){ obj.doSomeThing(); } } public void setTem(double tem){ this.tem = tem; } public void sendMessage(){ if(this.tem>40.0){ testAlarm(); }else{ System.out.println("=========正常工作==========="); } } }

观察者模式客户端

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package gjObserverPattern; /** * 观察者模式客户端 * @author gong * */ public class Client { public static void main(String[] args) { System.out.println("==========机房监控系统开启========="); Gj19Voice Voice = new Gj19Voice(); Gj19InsulatedDoor InsulatedDoor = new Gj19InsulatedDoor(); Gj19Light Light = new Gj19Light(); Gj19Security SecrurityDoor = new Gj19Security(); //传感器 Gj19Sensor gj19Sensor = new Gj19Sensor(); //添加设备 gj19Sensor.add(SecrurityDoor); gj19Sensor.add(Light); gj19Sensor.add(InsulatedDoor); gj19Sensor.add(Voice); //响应 gj19Sensor.setTem(30.0); gj19Sensor.sendMessage(); System.out.println("nn=============温度过高, 使系统出现故障============"); gj19Sensor.setTem(50.0); gj19Sensor.sendMessage(); } }

五、运行结果:

这里写图片描述

最后

以上就是独特大山最近收集整理的关于设计模式练习(17)——观察者模式的全部内容,更多相关设计模式练习(17)——观察者模式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部