北京北大青鸟学校讲解java观察者设计模式之角色

北京北大青鸟学校学术部老师介绍,在观察者模式里有以下角色:

抽象主题(Subject)角色:北京北大青鸟学校老师介绍,主题角色把所有的观察者对象的引用保存在一个列表里;每个主题都可以有任何数量的观察者。主题提供一个接口可以加上或撤销观察者对象;主题角色又叫做抽象被观察者(Observable)角色; 可以用一个抽象类或者一个接口实现;在具体的情况下也不排除使用具体类实现。

北大青鸟学校

抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到通知时更新自己; 抽象观察者角色,可以用一个抽象类或者一个接口实现;在具体的情况下也不排除使用具体类实现。 (北京北大青鸟学校)

北大青鸟学校

具体主题(ConcreteSubject)角色:保存对具体观察者对象有用的内部状态;在这种内部状态改变时给其观察者发出一个通知;具体主题角色又叫作具体被观察者角色;(北京北大青鸟学校)

北大青鸟学校

具体观察者(ConcreteObserver)角色:保存一个指向具体主题对象的引用;和一个与主题的状态相符的状态。具体观察者角色实现抽象观察者角色所要求的更新自己的接口,以便使本身的状态与主题的状态自恰。 (北京北大青鸟学校)

下面给出一个示意性实现的Java代码。首先在这个示意性的实现里,用一个Java接口实现抽象主题角色,这就是下面的Subject接口:(北京北大青鸟学校)

这个抽象主题接口规定出三个子类必须实现的操作,即 attach() 用来增加一个观察者对象;detach() 用来删除一个观察者对象;和notifyObservers() 用来通知各个观察者刷新它们自己。抽象主题角色实际上要求子类保持一个以所有的观察者对象为元素的列表。

具体主题则是实现了抽象主题Subject接口的一个具体类,它给出了以上的三个操作的具体实现。从下面的源代码可以看出,这里给出的Java实现使用了一个Java向量来保存所有的观察者对象,而 attach() 和 detach() 操作则是对此向量的元素增减操作。(北京北大青鸟学校)

抽象观察者角色的实现实际上是最为简单的一个,它是一个Java接口,只声明了一个方法,即update()。这个方法被子类实现后,一被调用便刷新自己。(北京北大青鸟学校)
public interface Observer
{
void update();
}
代码清单3、Observer接口的源代码。

具体观察者角色的实现其实只涉及update()方法的实现。这个方法怎么实现与应用密切相关,因此本类只给出一个框架。
public class ConcreteObserver implements Observer
{
public void update()
{
// Write your code here
}
}
代码清单4、ConcreteObserver类的源代码。

北京北大青鸟学校专家表示:虽然观察者模式的实现方法可以有设计师自己确定,但是因为从AWT1.1开始视窗系统的事件模型采用观察者模式,因此观察者模式在Java语言里的地位较为重要。正因为这个原因,Java语言给出了它自己对观察者模式的支持。因此,北京北大青鸟学校老师建议同学们在自己的系统中应用观察者模式时,不妨利用Java语言所提供的支持。

北大青鸟网上报名
北大青鸟招生简章