java观察者模式应用_Java设计模式应用——观察者模式

告警结果产生后,可能需要发送短信,邮件,故障管理系统。这些转发操作不应当影响告警生成入库,并且类似事件可能根据不同场景,客户习惯不同,此时,使用观察者模式则可以很好的适应上述场景。

观察者模式应当包括:

1、 观察事件;

2、 观察者接口;

3、 若干观察者;

4、 观察者注册管理中心;

下面,我们使用观察者模式来开发告警短信、邮件转发功能;

1、 告警生成事件;

packagecom.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 classAlarmEvent

{privateString alarmId;privateString eventType;publicAlarmEvent(String alarmId, String eventType) {this.alarmId =alarmId;this.eventType =eventType;

}publicString getAlarmId() {returnalarmId;

}public voidsetAlarmId(String alarmId) {this.alarmId =alarmId;

}publicString getEventType() {returneventType;

}public voidsetEventType(String eventType) {this.eventType =eventType;

}

}

2、 告警生成观察者接口;

packagecom.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 interfaceAlarmObserver

{public voidrun(AlarmEvent event);

}

3、 邮件转发观察者;

packagecom.coshaho.learn.observer;public class EmailSendObserver implementsAlarmObserver{public voidrun(AlarmEvent event) {

System.out.println("Send email success. Alarm id is " +event.getAlarmId()+ ", operation type is " +event.getEventType());

}

}

4、 短信转发观察者;

packagecom.coshaho.learn.observer;public class SMSSendObserver implementsAlarmObserver{public voidrun(AlarmEvent event) {

System.out.println("Send SMS success. Alarm id is " +event.getAlarmId()+ ", operation type is " +event.getEventType());

}

}

5、 观察者注册管理中心;

packagecom.coshaho.learn.observer;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.ExecutorService;importjava.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 classObserverManager

{

List list = new ArrayList();public voidadd(AlarmObserver observer)

{

list.add(observer);

}public voidremove(AlarmObserver observer)

{

list.remove(observer);

}public voidnotify(AlarmEvent event)

{for(AlarmObserver observer : list)

{

poolService.execute(newObserverThread(observer, event));

}

}private ExecutorService poolService = Executors.newFixedThreadPool(5);public class ObserverThread implementsRunnable

{privateAlarmObserver observer;privateAlarmEvent event;publicObserverThread(AlarmObserver observer, AlarmEvent event)

{this.observer =observer;this.event =event;

}public voidrun() {

observer.run(event);;

}

}

}

6、 测试类;

packagecom.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 classObserverTest {public static voidmain(String[] args)

{

AlarmEvent createEvent= new AlarmEvent("1", "create");

AlarmEvent updateEvent= new AlarmEvent("1", "update");

ObserverManager manager= newObserverManager();

AlarmObserver emailObserver= newEmailSendObserver();

AlarmObserver smsObserver= newSMSSendObserver();

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 is1, operation type is create

Send email success. Alarm id is1, operation type is update

Send SMS success. Alarm id is1, operation type is update

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值