設計模式 觀察者模式

2021-07-27 04:14:34 字數 1576 閱讀 6981

不想當設計模式巨星的程式設計師不是好設計師。從本期開始我們對設計模式做乙個系統性的總結。headfirst設計模式看了兩遍。我盡量將書中的每個模式的重點提取出來,方便研讀。

比如有這樣乙個情節--------訂閱報紙:

1、報社提供的業務是出版報紙。

2、使用者只要向報社訂閱了報紙,報社在有新報紙出版時,就會將報紙送給使用者。而且使用者一定可以收到新的報紙。

3、當使用者不想看報紙時,取消訂閱,再有新報紙時,報社也不會向使用者推送。

觀察者模式就跟訂閱報紙是一回事,只是名稱不一樣罷了。

圖釋:

定義觀察者模式:定義乙個物件和多個依賴。當乙個物件改變時,他的所有依賴者都會收到通知,並自動更新。

觀察者模式提供了一種這樣的設計思想。物件和依賴者之間是松耦合。他們依然可以互動,但是不太清楚彼此的細節。松耦合的設計之所以能讓我們建立有彈性的oo(物件導向)系統,能夠應對變化,是因為他們之間相互依賴的降低。

結合具體**做乙個簡單的講解。

1、根據出版社(press)和讀者朋友(reader)兩種角色來設計觀察者模式,根據上文定義,出版社需要為讀者朋友(reader)提供三種功能:註冊監聽、取消監聽、通知更新。讀者朋友需要的技能是reading。中間還需要乙個觀察者介面observer來鏈結他們的狀態更新。所以需要設計這樣三個介面:

出版社介面

public inte***ce ipress
閱讀者介面

public inte***ce ireader()
觀察者介面

public inte***ce iobserver
2、依據上面介面,結合實際需求,寫出相應實現。

出版社

public class pressdata implements ipress

@override

public void registerobserver((observer o)

@override

public void removeobserver(iobserver o)

}@override

public void notifyobservers()

@override

public void updata(date,content)

@override

public void reading()

}

3、具體呼叫

public class readingstation()

}

這裡定義的觀察者模式可能跟我們已經用到的不太一樣。或許你會覺得稍微複雜了一點,怎麼會這麼多類?。。。實際確實如此,這裡寫的稍微松耦合了一下。實際我們之前寫的時候乙個類就搞定了。那麼根據書中介紹的,再次強調,我們要注重松耦合。當然只定義乙個oberver去掉註冊和取消監聽的方法,我們直接實現oberver類,然後傳入呼叫介面行了,這樣的情況也是有的。但是上面的例子確實值得思考。

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...

設計模式 觀察者模式

核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...