Java设计模式应用——观察者模式
告警结果产生后,可能需要发送短信,邮件,故障管理系统。这些转发操作不应当影响告警生成入库,并且类似事件可能根据不同场景,客户习惯不同,此时,使用观察者模式则可以很好的适应上述场景。
观察者模式应当包括:
1、 观察事件;
2、 观察者接口;
3、 若干观察者;
4、 观察者注册管理中心;
下面,我们使用观察者模式来开发告警短信、邮件转发功能;
1、 告警生成事件;
package com.coshaho.learn.observer; /**
*
* AlarmEvent.java Create on 2017年5月31日 下午10:59:24
*
* 类功能说明: 告警结果事件
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public class AlarmEvent
{
private String alarmId; private String eventType; public AlarmEvent(String alarmId, String eventType) {
this.alarmId = alarmId;
this.eventType = eventType;
} public String getAlarmId() {
return alarmId;
} public void setAlarmId(String alarmId) {
this.alarmId = alarmId;
} public String getEventType() {
return eventType;
} public void setEventType(String eventType) {
this.eventType = eventType;
}
}
2、 告警生成观察者接口;
package com.coshaho.learn.observer; /**
*
* AlarmObserver.java Create on 2017年5月31日 下午11:22:43
*
* 类功能说明: 观察者接口
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public interface AlarmObserver
{
public void run(AlarmEvent event);
}
3、 邮件转发观察者;
package com.coshaho.learn.observer; public class EmailSendObserver implements AlarmObserver{ public void run(AlarmEvent event) { System.out.println("Send email success. Alarm id is " + event.getAlarmId()
+ ", operation type is " + event.getEventType()); } }
4、 短信转发观察者;
package com.coshaho.learn.observer; public class SMSSendObserver implements AlarmObserver{ public void run(AlarmEvent event) {
System.out.println("Send SMS success. Alarm id is " + event.getAlarmId()
+ ", operation type is " + event.getEventType());
} }
5、 观察者注册管理中心;
package com.coshaho.learn.observer; import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
*
* ObserverManager.java Create on 2017年5月31日 下午11:15:44
*
* 类功能说明: 观察者注册管理中心
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public class ObserverManager
{ List<AlarmObserver> list = new ArrayList<AlarmObserver>(); public void add(AlarmObserver observer)
{
list.add(observer);
} public void remove(AlarmObserver observer)
{
list.remove(observer);
} public void notify(AlarmEvent event)
{
for(AlarmObserver observer : list)
{
poolService.execute(new ObserverThread(observer, event));
}
} private ExecutorService poolService = Executors.newFixedThreadPool(5);
public class ObserverThread implements Runnable
{
private AlarmObserver observer;
private AlarmEvent event;
public ObserverThread(AlarmObserver observer, AlarmEvent event)
{
this.observer = observer;
this.event = event;
}
public void run() {
observer.run(event);;
}
}
}
6、 测试类;
package com.coshaho.learn.observer; /**
*
* ObserverTest.java Create on 2017年5月31日 下午11:26:29
*
* 类功能说明: 测试
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public class ObserverTest {
public static void main(String[] args)
{
AlarmEvent createEvent = new AlarmEvent("1", "create");
AlarmEvent updateEvent = new AlarmEvent("1", "update"); ObserverManager manager = new ObserverManager();
AlarmObserver emailObserver = new EmailSendObserver();
AlarmObserver smsObserver = new SMSSendObserver();
manager.add(emailObserver);
manager.add(smsObserver); manager.notify(createEvent);
manager.notify(updateEvent);
}
}
7、 结果。
Send email success. Alarm id is 1, operation type is create
Send SMS success. Alarm id is 1, operation type is create
Send email success. Alarm id is 1, operation type is update
Send SMS success. Alarm id is 1, operation type is update
Java设计模式应用——观察者模式的更多相关文章
- 理解java设计模式之观察者模式
在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...
- java设计模式之观察者模式以及在java中作用
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...
- java设计模式02观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 这里主要讲一下学习内置观察者的记录,在JA ...
- java设计模式之观察者模式
观察者模式 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模 ...
- JAVA设计模式 之 观察者模式
简介: 观察者模式是JDK中最多的设计模式之一,非常有用,观察者模式介绍了一对多的依赖关系及松耦合,有了观察者,你将会消息灵通. 认识观察者模式,看一个报纸.杂志订阅是怎么回事: (1). 报社的业务 ...
- 折腾Java设计模式之观察者模式
观察者模式 Define a one-to-many dependency between objects where a state change in one object results in ...
- JAVA设计模式之观察者模式 - Observer
有趣的事情发生时,可千万别错过了!有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事.对象甚至在运行时可决定是否要继续被通知.有了观察者,你将会消息灵通. 介绍 观察者模式的定义: 在对象之间 ...
- JAVA设计模式 之 观察者模式(JDK内置实现)
简介:使用JAVA内置的帮你搞定观察者模式. 1. 先把类图放在这里: (1). Observable类追踪所有的观察者,并通知他们. (2). Observer这个接口看起来很熟悉,它和我们之前写的 ...
- java设计模式之观察者模式(9)
Java观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者 ...
- java设计模式:观察者模式
package Observer; public class Test { /** * client测试类别 * 观察者模式一般由四部分组成: * 1摘要观察员(教科书被称为一般"Subje ...
随机推荐
- [工具] CintaNotes
CintaNotes是一款非常轻巧实用的笔记软件,可看作EverNote轻量级替代品.CintaNotes只需1个exe,体积仅1MB,却拥有 EverNote易于收集.实时搜索.条状排列.tag分类 ...
- Xcode - Your development team, "", does not support the Push Notifications capability.
1.问题描述: 从git上checkout了别人的一个工程文件,选择team时,Xcode显示如下问题 Your development team, "xxx.xxx.xxx", ...
- pandas numpy处理缺失值,none与nan比较
原文链接:https://junjiecai.github.io/posts/2016/Oct/20/none_vs_nan/ 建议从这里下载这篇文章对应的.ipynb文件和相关资源.这样你就能在Ju ...
- poj2492 A Bug's Life【并查集】
Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assume ...
- 如何将Win10 的环境变量页面设置用在win7上面?
如何将Win10 的环境变量设置用在win7上面? Win7一般是如下设置: Win10 是如下设置: 解决办法: 注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr ...
- 2.5BatchNormalzation
BatchNormalzation是一种解决深度神经网络层数太多,而没有办法有效前向传递的问题,因为每层的输出值都会有不同的均值和方差,所以输出数据的分布也不一样. 如果对于输入的X*W本身得到的值通 ...
- 停机问题(英语:halting problem)是逻辑数学中可计算性理论的一个问题。通俗地说,停机问题就是判断任意一个程序是否能在有限的时间之内结束运行的问题。该问题等价于如下的判定问题:是否存在一个程序P,对于任意输入的程序w,能够判断w会在有限时间内结束或者死循环。
htps://baike.baidu.com/item/停机问题/4131067?fr=aladdin 理发师悖论:村子里有个理发师,这个理发师有条原则是,对于村里所有人,当且仅当这个人不自己理发,理 ...
- js之操作cookie
js通过document.cookie获取所有的cookie信息, cookie在存储的格式是键值对,key=value每个键值对之间用; (分号和空格隔开). 添加cookie和修改cookie的值 ...
- veterbi
https://www.zhihu.com/question/20136144 作者:知乎用户链接:https://www.zhihu.com/question/20136144/answer/372 ...
- GP服务中无Tasks
发布GP服务,之后执行GP服务时,发现无Tasks,如下图所示 正常情况应该如下图 问题原因在于,arcmap与server版本不一致~~ (10.4.1arcmap 与 10.2.2 server) ...