观察者模式
一、题目:
某公司欲开发一套机房监控系统,如果机房达到一定指定温度,传感器将作出反应,将信号传递给响应设备,如警示灯将闪烁,报警器将发出警报,安全逃生门将自动开启、隔热门将自动关闭,每一响应设备的行为右专门的程序来控制,为支持将来引入新类型的响应设备,用观察者模式设计该系统
(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)——观察者模式内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复