北京北大青鳥(niǎo)學(xué)校講解java觀察者設(shè)計(jì)模式之角色

北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部老師介紹,在觀察者模式里有以下角色:

抽象主題(Subject)角色:北京北大青鳥(niǎo)學(xué)校老師介紹,主題角色把所有的觀察者對(duì)象的引用保存在一個(gè)列表里;每個(gè)主題都可以有任何數(shù)量的觀察者。主題提供一個(gè)接口可以加上或撤銷觀察者對(duì)象;主題角色又叫做抽象被觀察者(Observable)角色; 可以用一個(gè)抽象類或者一個(gè)接口實(shí)現(xiàn);在具體的情況下也不排除使用具體類實(shí)現(xiàn)。

北大青鳥(niǎo)學(xué)校

抽象觀察者(Observer)角色:為所有的具體觀察者定義一個(gè)接口,在得到通知時(shí)更新自己; 抽象觀察者角色,可以用一個(gè)抽象類或者一個(gè)接口實(shí)現(xiàn);在具體的情況下也不排除使用具體類實(shí)現(xiàn)。 (北京北大青鳥(niǎo)學(xué)校)

北大青鳥(niǎo)學(xué)校

具體主題(ConcreteSubject)角色:保存對(duì)具體觀察者對(duì)象有用的內(nèi)部狀態(tài);在這種內(nèi)部狀態(tài)改變時(shí)給其觀察者發(fā)出一個(gè)通知;具體主題角色又叫作具體被觀察者角色;(北京北大青鳥(niǎo)學(xué)校)

北大青鳥(niǎo)學(xué)校

具體觀察者(ConcreteObserver)角色:保存一個(gè)指向具體主題對(duì)象的引用;和一個(gè)與主題的狀態(tài)相符的狀態(tài)。具體觀察者角色實(shí)現(xiàn)抽象觀察者角色所要求的更新自己的接口,以便使本身的狀態(tài)與主題的狀態(tài)自恰。 (北京北大青鳥(niǎo)學(xué)校)

下面給出一個(gè)示意性實(shí)現(xiàn)的Java代碼。首先在這個(gè)示意性的實(shí)現(xiàn)里,用一個(gè)Java接口實(shí)現(xiàn)抽象主題角色,這就是下面的Subject接口:(北京北大青鳥(niǎo)學(xué)校)

這個(gè)抽象主題接口規(guī)定出三個(gè)子類必須實(shí)現(xiàn)的操作,即 attach() 用來(lái)增加一個(gè)觀察者對(duì)象;detach() 用來(lái)刪除一個(gè)觀察者對(duì)象;和notifyObservers() 用來(lái)通知各個(gè)觀察者刷新它們自己。抽象主題角色實(shí)際上要求子類保持一個(gè)以所有的觀察者對(duì)象為元素的列表。

具體主題則是實(shí)現(xiàn)了抽象主題Subject接口的一個(gè)具體類,它給出了以上的三個(gè)操作的具體實(shí)現(xiàn)。從下面的源代碼可以看出,這里給出的Java實(shí)現(xiàn)使用了一個(gè)Java向量來(lái)保存所有的觀察者對(duì)象,而 attach() 和 detach() 操作則是對(duì)此向量的元素增減操作。(北京北大青鳥(niǎo)學(xué)校)

抽象觀察者角色的實(shí)現(xiàn)實(shí)際上是最為簡(jiǎn)單的一個(gè),它是一個(gè)Java接口,只聲明了一個(gè)方法,即update()。這個(gè)方法被子類實(shí)現(xiàn)后,一被調(diào)用便刷新自己。(北京北大青鳥(niǎo)學(xué)校)
public interface Observer
{
void update();
}
代碼清單3、Observer接口的源代碼。

具體觀察者角色的實(shí)現(xiàn)其實(shí)只涉及update()方法的實(shí)現(xiàn)。這個(gè)方法怎么實(shí)現(xiàn)與應(yīng)用密切相關(guān),因此本類只給出一個(gè)框架。
public class ConcreteObserver implements Observer
{
public void update()
{
// Write your code here
}
}
代碼清單4、ConcreteObserver類的源代碼。

北京北大青鳥(niǎo)學(xué)校專家表示:雖然觀察者模式的實(shí)現(xiàn)方法可以有設(shè)計(jì)師自己確定,但是因?yàn)閺腁WT1.1開(kāi)始視窗系統(tǒng)的事件模型采用觀察者模式,因此觀察者模式在Java語(yǔ)言里的地位較為重要。正因?yàn)檫@個(gè)原因,Java語(yǔ)言給出了它自己對(duì)觀察者模式的支持。因此,北京北大青鳥(niǎo)學(xué)校老師建議同學(xué)們?cè)谧约旱南到y(tǒng)中應(yīng)用觀察者模式時(shí),不妨利用Java語(yǔ)言所提供的支持。

北大青鳥(niǎo)網(wǎng)上報(bào)名
北大青鳥(niǎo)招生簡(jiǎn)章