java 观察者模式 异步_Java设计模式之观察者模式

本文介绍了Java中的观察者模式,也叫发布订阅模式,定义了对象间一对多的依赖关系。给出了抽象观察者、具体观察者、抽象被观察者、具体被观察者和场景类的代码示例,还分析了该模式的优缺点,指出观察者较多时可采用异步方式通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概论

什么是观察者模式呢?观察者模式也叫发布订阅模式。定义对象间一种一对多的依赖关系,是的每当一个对象改变了状态,则所有依赖于它的对象都会得到通知并且自动更新。

观察者模式示例

首先我们定义一个抽象的观察者:

1 public interfaceObserver {2

3 public voidupdate();4 }

一般定义为接口,第3行,提供一个接口用于接收被观察者的动态。我们再增加一个具体的观察者:

1 public class ConcreateObserver implementsObserver {2

3 @Override4 public voidupdate() {5 System.out.println("接受到被观察者的通知,并且处理");6 }7 }

我们定义一个抽象的被观察者。被观察者的职责是能够动态的增加观察者和删除观察者,并且行为的改变能够通知所有的观察者。增加和删除这两个动作我们叫做管理。于是抽象的被观察者的责任就是管理观察者,同时及时把动态通知观察者。

1 public abstract classAbstractSubject {2

3 private List observers = new ArrayList();4

5 public abstract voidproccess();6

7 public voidadd(Observer observer) {8 if(observer == null) {9 return;10 }11

12 this.observers.add(observer);13 }14

15 public voidremove(Observer observer) {16 this.observers.remove(observer);17 }18

19 public voidnotifyObservers() {20

21 observers.forEach(item ->{22 item.update();23 });24

25 }26

27

28 }

第3行,定义一个集合用来存储订阅的观察者。

第7行-14行,增加一个观察者。

第15行-17行,删除一个观察者。

第19行-25行,通知所有的观察者。

再来看看具体的被观察者:

1 public class ConcreateSubject extendsAbstractSubject {2

3 @Override4 public voidproccess () {5 System.out.println("执行业务逻辑....");6 super.notifyObservers();7 }8 }

第5行,执行具体的业务逻辑。

第6行,被观察者的业务发生了变化,需要通知所有的观察者。调用父类的方法。

最后我们增加一个场景类Client:

1 public classClient {2

3 public static voidmain(String[] args) {4 AbstractSubject subject = newConcreateSubject();5 Observer observer = newConcreateObserver();6

7 subject.add(observer);8 subject.add(observer);9

10 subject.proccess();11 }12 }

我们先执行一下结果:

执行业务逻辑....

接受到被观察者的通知,并且处理

接受到被观察者的通知,并且处理

观察者模式的优缺点

1.观察者和被观察者之间是抽象耦合。

2.建立一套触发机制。

观察者较多时,容易造成阻塞,因此可以采用异步的方式通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值