オブザーバーと要約を建て-Javaデザインパターンの観測モード


次のオブザーバー

前回の記事では、我々は、気象観測所プロジェクトは、中小企業部門部門でオブザーバーパターン汚い汚い爆弾を使用する方法を学びましたか。この中で、我々は重要なポイントとオブザーバーモードを要約し、そこにあるJavaの組み込みのオブザーバーモード。

この記事の出所:凱歌のJava(kagejava)

A:Javaは内蔵ビューワー

私たちは、使用するJavaの組み込みの気象観測所の観測者が一度プログラムを再書き込みます。

内蔵の差異ビューア:

件名オブジェクト:

1 サブジェクト名に変更観測、同じ機能を、または登録、削除、観察者は、3つの機能を気づくまで。

2 観測代わりインタフェースのオブジェクトなので、使用時には、使用中に達成され、継承の使用を必要とすることはできません。利点がある:登録、削除オブザーバーでオブザーバーは、オブザーバーたちが書き込むことはできませんこれらの3つの方法の特定の実装に気づくので、それは、継承関係であるため。

オブザーバーのオブジェクト:

オブザーバオブジェクトの名前は、関数または変更されません更新、変更はありません。しかし、また、インタフェースオブジェクト。 

なぜオブザーバーインタフェースとクラス、それを使わないのでしょうか?私たちは私たちのことを知っているので、観察者は別のプロジェクトで、必ずしも要求しません。だから、あなただけ定義するためのインタフェースを使用することができます。特定の実装、機能を実現するための独自のプロジェクトに応じて、各プロジェクト。

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

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

项目结构:

image1.png

测试类:JavaObserverWeatherMainTest

需要说明的:

public class CurrentConditionJava implements Observer {}

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

public class WeaterDataJava extends Observable {}

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

运行结果:

image2.png

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

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

image3.png

这一点一定要注意。

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

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

image4.png

实现方式:

image5.png

观察者模式使用场景:

image6.png


观察者模式四个角色:

image7.png

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

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

观察者模式的优缺点:

image8.png

观察者模式执行过程

image9.png

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

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

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

联系凯哥:

公众号:凯哥Java(kaigejava)

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

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

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

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



おすすめ

転載: blog.51cto.com/kaigejava/2432183