本文共 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、建立一套触发机制。
缺点
观察者之间有更多细节依赖,实现消耗多,程序复杂性高。
—— 完
公众号:【星尘Pro】
github:
推荐阅读
https://www.runoob.com/design-pattern/observer-pattern.html
转载地址:http://gyfsi.baihongyu.com/