不想當設計模式巨星的程式設計師不是好設計師。從本期開始我們對設計模式做乙個系統性的總結。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 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...