设计模式练习(17)——观察者模式
2017-01-20 16:05
393 查看
观察者模式
一、题目:某公司欲开发一套机房监控系统,如果机房达到一定指定温度,传感器将作出反应,将信号传递给响应设备,如警示灯将闪烁,报警器将发出警报,安全逃生门将自动开启、隔热门将自动关闭,每一响应设备的行为右专门的程序来控制,为支持将来引入新类型的响应设备,用观察者模式设计该系统
(1)绘制观察者模式结构视图
(2)给出实例类图并实现代码
二、所用模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前面加了Gj19)
警报危机监测
package gjObserverPattern; /** * 警报危机监测 * * @author gong * */ public interface Gj19AlarmListener { public void doSomeThing();//警示灯将闪烁,报警器将发出警报,安全逃生门将自动开启、隔热门将自动关闭 }
警示灯
package gjObserverPattern; /** * 警示灯 * @author gong * */ public class Gj19Light implements Gj19AlarmListener{ @Override public void doSomeThing() { light(); } public void light(){ System.out.println("警示灯闪烁....."); } }
报警器
package gjObserverPattern; /** * 报警器 * @author gong * */ public class Gj19Voice implements Gj19AlarmListener{ @Override public void doSomeThing() { alarm(); } public void alarm(){ System.out.println("报警器发出警报...."); } }
安全门
package gjObserverPattern; /** * 安全门 * @author gong * */ public class Gj19Security implements Gj19AlarmListener{ @Override public void doSomeThing() { open(); } public void open(){ System.out.println("安全逃生门将自动开启....."); } }
隔热门
package gjObserverPattern; /** * 隔热门 * @author gong * */ public class Gj19InsulatedDoor implements Gj19AlarmListener{ @Override public void doSomeThing() { close(); } public void close(){ System.out.println("隔热门将自动关闭...."); } }
传感器
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("=========正常工作==========="); } } }
观察者模式客户端
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("\n\n=============温度过高, 使系统出现故障============"); gj19Sensor.setTem(50.0); gj19Sensor.sendMessage(); } }
五、运行结果:
相关文章推荐
- 设计模式(17)——观察者模式(Observer Pattern)
- 设计模式17:Observer Pattern (观察者模式)
- Java设计模式(17)——行为模式之观察者模式(Observer)
- 设计模式(17)-观察者模式
- C#设计模式(17)——观察者模式(Observer Pattern)
- C#设计模式(17)——观察者模式(Observer Pattern)
- 设计模式(17)-观察者模式
- 设计模式(17) - 观察者模式
- 设计模式——观察者模式
- 设计模式(17)-Chain of Responsibility Pattern
- 利用观察者模式设计仿真器内核接口
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- 设计模式(17)-Chain of Responsibility Pattern
- GEF框架中的设计模型(观察者模式)
- 探究观察者设计模式
- 设计模式之观察者模式
- 设计模式理解 - 伟大的【Observer 观察者模式】
- 设计模式(17)-Chain of Responsibility Pattern
- Java设计模式之Observer(观察者)模式
- Java设计模式之Observer 观察者模式