博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试必问的设计模式 | 观察者模式
阅读量:4104 次
发布时间:2019-05-25

本文共 1464 字,大约阅读时间需要 4 分钟。

一、简介

观察者模式(Observer Pattern) 是一种 行为型 模式,观察者模式定义了对象之间一对多依赖,让多个观察者对象同时监听主体对象,当主体对象发生变化,所有观察都会收到通知并更新,也叫发布订阅模式

二、实例

下面我们使用观察者模式,模拟一个用户下单,就可以收到短信和邮件通知的功能,JDK 默认自带了观察者的实现功能,我们只需要实现 util 下的 Observer 和 Observable 类即可。

首先我们先定义一个被观察者,也就是主题

public class MessageObservable extends Observable {
@Override public void notifyObservers(Object arg) {
//1、允许群发 setChanged(); //2、群发消息 super.notifyObservers(arg); }}

然后我们定义观察者,短信通知类和邮件通知类

public class SmsObserver implements Observer {
@Override public void update(Observable o, Object arg) {
System.out.println("短信提醒"+arg); }}
public class EmailObserver implements Observer {
@Override public void update(Observable o, Object arg) {
System.out.println("邮件提醒"+arg); }}

下面我们再定义一个客户端类进行测试,我们先创建一个主题,然后注册观察者,如果用户下单成功,就会通知观察者,从而给客户发送短信。

public class Main {
public static void main(String[] args){
//1、创建主题 Observable observer = new MessageObservable(); //2、注册观察者 observer.addObserver(new SmsObserver()); observer.addObserver(new EmailObserver()); //3、群发消息 observer.notifyObservers("下单成功"); }}

三、总结

1、什么是观察者

观察者模式定义了对象之间一对多依赖,让多个观察者对象同时监听主体对象,当主体对象发生变化,所有观察都会收到通知并更新,也叫发布订阅模式

2、观察者模式使用场景

邮件通知,广播通知

3、观察者模式有什么优缺点

优点

1、观察者和被观察者是抽象耦合的。

2、建立一套触发机制。

缺点

观察者之间有更多细节依赖,实现消耗多,程序复杂性高。

4、类图

—— 完

ABOUT

公众号:【星尘Pro】

github:

推荐阅读

参考资料

https://www.runoob.com/design-pattern/observer-pattern.html

转载地址:http://gyfsi.baihongyu.com/

你可能感兴趣的文章
弱类型、强类型、动态类型、静态类型语言的区别是什么?
查看>>
Struts2技术内幕图书 转载
查看>>
Java异常分类
查看>>
项目中的jackson与json-lib使用比较
查看>>
Jackson Tree Model Example
查看>>
j2ee-验证码
查看>>
日志框架logj的使用
查看>>
js-高德地图规划路线
查看>>
常用js收集
查看>>
mydata97的日期控件
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android-Socket登录实例
查看>>
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>