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 ...
随机推荐
- 【BZOJ1294】[SCOI2009]围豆豆Bean 射线法+状压DP+SPFA
[BZOJ1294][SCOI2009]围豆豆Bean Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别 ...
- Java虚拟机七 虚拟机监控
jstack 用于导出Java应用程序的线程堆栈:jstack [-l] <pid> -l 选项用于打印锁的附加信息 jstack -l 2348 > /data/deadlock. ...
- VMware虚拟机安装Ubuntu系统英文改中文的方法
首先点击右上角的这个桌面 1,Change Desktop Background 图片发自简书App 2.到系统设置(System Settings)--- 点击Language Support ...
- PyCharm导入tensorflow包报错的问题
[注]PyCharm导入tensorflow包报错的问题 若是你也遇到这个问题,说明你也没有理解tensorflow到底在哪里. 当安装了anaconda3.6后,在PyCharm中设置interpr ...
- POJ 2528 - Mayor's posters - [离散化+区间修改线段树]
题目链接:http://poj.org/problem?id=2528 Time Limit: 1000MS Memory Limit: 65536K Description The citizens ...
- 数据恢复:AMDU数据抽取恢复
今天我们通过一则真实的案例来认识oracle 自带工具AMDU,无需将磁盘组mount即可实现数据分析,轻松进行数据恢复.某日,我们收到了一则香港用户ASM破坏案例,请求数据恢复.灾难描述:这则案例是 ...
- thread safe
computer science J. Glenn Brookshear with contributions from David T. SmithIndiana University of Pen ...
- 拓扑_dfs——找最小环
今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...
- mysql 权限管理 对所有库 所有表 授权 *.*
对miek这个账号localhost 授予了所有库,所表的select权限 mysql> grant select on *.* to 'mike'@'localhost'; Query OK, ...
- Linux Packages Search
网站 : https://www.pkgs.org/ https://centos.pkgs.org/