十六 行為型模式 觀察者模式

2021-09-03 02:03:40 字數 1394 閱讀 7664

一、觀察者模式

觀察者模式很好理解,類似於郵件訂閱和rss訂閱,當我們瀏覽一些部落格或wiki時,經常會看到rss圖示,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講就一句話:當乙個物件變化時,其它依賴該物件的物件都會收到通知,並且隨著變化!物件之間是一種一對多的關係。先來看看關係圖:

我解釋下這些類的作用:mysubject類就是我們的主物件,observer1和observer2是依賴於mysubject的物件,當mysubject變化時,observer1和observer2必然變化。abstractsubject類中定義著需要監控的物件列表,可以對其進行修改:增加或刪除被監控物件,且當mysubject變化時,負責通知在列表內存在的物件。我們看實現**:

乙個observer介面:

public inte***ce observer
二個實現類:

public class observer1 implements observer 

}public class observer2 implements observer

}

subject介面及實現類:

public inte***ce subject 

public abstract class abstractsubject implements subject

@override

public void del(observer observer)

@override

public void notifyobservers() }}

public class mysubject extends abstractsubject

}

測試類:

public class observertest 

}

輸出:

update self!

observer1 has received!

observer2 has received!

二、總結

觀察者—想知道咱們公司最新mm情報嗎?加入公司的mm情報郵件組就行了,tom負責蒐集情報,他發現的新情報不用乙個乙個通知我們,直接發布給郵件組,我們作為訂閱者(觀察者)就可以及時收到情報啦。

觀察者模式:觀察者模式定義了一種一隊多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,使他們能夠自動更新自己。

行為型模式 觀察者模式

物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。subject 抽象的主題,被觀察的物件,提供 attach 和detach observer 物件的介面。concretesubject 具體的被觀察物件,維持 concretesubject 狀態...

行為型模式 觀察者模式

抽象觀察者,及具體觀察者 class abstractobserver class student public abstractobserver virtual void dobadthing 老師沒來應該幹什麼 virtual void onteachercoming 老師來了應該幹什麼 pri...

行為型模式(4) 觀察者模式

指多個物件間存在一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。這種模式有時又稱作發布 訂閱模式 模型 檢視模式,它是物件行為型模式。適用場景 如果存在一系列類,他們都需要向指定類獲取指定的資料,當獲取到資料後需要觸發相應的業務邏輯。這種場景就可以用觀察者模式...