设计模式之观察者模式-Java内置观察者及总结

 

观察者下篇

在上一篇文章中,我们通过污污弹公司司小司做气象站项目学习了观察者模式怎么使用。在本篇中,我们对观察者模式进行总结及关键点,还有一个就是Java中内置的观察者模式。

本文出处:凯哥Java(kagejava)

一:Java内置的观察者

我们将使用Java内置的观察者将气象站项目重新写一次。

内置观察者的区别:

Subject对象:

1:subject名称变了,变成了Observable了;功能不变,还是注册、移除、通知观察者三个功能;

2:observable是对象而非接口了,所以在使用的时候,不能在使用实现了,需要使用继承关系。好处就是:因为是继承关系,所以在注册观察者、移除观察者、通知观察者这三个方法具体实现我们可以不用写了。

Observer对象:

observer对象名字没有变化,功能还是update,没有变化。 而且还是接口对象。

那么为什么observer不用类而用接口呢?因为我们知道,我们的observer是不同的项目,需求不一定的。所以,只能使用接口来定义了。具体实现,各个项目根据自己项目功能自行实现即可。

不同:update时候,可以选择将信息主动推送给观察者还是让观察者自己来拉去。在Java内置的观察者模式中,推/拉都可以。

使用Java内置观察者实现的代码:

项目结构:

测试类:JavaObserverWeatherMainTest

需要说明的:

public class CurrentConditionJava implements Observer {}

实现的Observer对象所在位置:import java.util.Observer;

public class WeaterDataJava extends Observable {}

继承的Observerable对象所在位置:import java.util.Observable;

运行结果:

达到我们预期的效果。说明,使用Java内置的观察者模式成功!

使用Java内置的观察者需要唯一注意的地方:observerable的继承者在datachange时候,需要先setChanged()。如下图:

这一点一定要注意。

二:观察者模式总结及关键点

百科上对观察者模式基本介绍:

实现方式:

观察者模式使用场景:

 

观察者模式四个角色:

抽象主题角色(subject)、主题角色具体实现类

抽象观察者角色(observer)、观察者具体实现类

观察者模式的优缺点:

观察者模式执行过程

从观察者模式中体会,松耦合、高内聚、隔离影响的意义:

松耦合:类与类之间不要太依赖,没有顺序。依赖类不用关系被依赖类的内部是怎么实现的。

对应天气站项目:实现了subject接口的天气对象不需要关系具体的公告板内部怎么实现的,需要做哪些。subject子类之关心公告板是否实现了observer接口类即可。

联系凯哥:

公众号:凯哥Java(kaigejava)

凯哥个人博客:www.kaigejava.com

留个言,加个好友,一起学习

就算实现了observer的公告板对象项目死掉了,subject对象依然可以正常运行。反之,就算subject项目死掉了,依然不会影响observer项目的运行。无非就是公告板不能公布最新数据而已。这就很好的体现了松耦合的好处。

高内聚:对象内部是高内聚的。这样便于调试、扩展等。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯哥Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值