小菜学设计模式——观察者模式
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
背景? ?
????上一次去看電影院看電影,半旁邊的妹子說只要掃一掃就能免費領取爆米花一份,你說我怎么躲得過妹子的招數呢?所以拿起我的手機,掃一掃,注冊會員,ok 領取爆米花。時間過去了,我發(fā)現我的手機怎么老是收到一些亂七八糟的信息,一旦有什么大小事我都會收到信息,你可知道我是拒絕的。恩,這里就說說,觀察者模式,因為我的手機號碼已經成為他們發(fā)消息的接收者,或說監(jiān)聽器、或說觀察者。
1、使用意圖? ?
????當一個對象改變的同時需要改變其他對象時,觀察者模式似乎很受用。
2、生活實例? ?
????飯點一到,所有同事包括我立刻放下手中的活,有看NBA的、有睡覺的,有直接去食堂排隊等飯吃的。似乎這里少了一個通知的過程,呵呵,不要緊。
3、Java 例子(框架、JDK 、JEE)
? ? 因為觀察者的本質就是監(jiān)聽器,所以使用監(jiān)聽器最多的當然是Swing或AWT,比如一個按鈕被點擊會觸發(fā)click事件,鼠標移動會觸發(fā)mouseover事件等,事件觸發(fā),就會通知對應觀察者(監(jiān)聽器)
4、模式類圖? ??
抽象主題角色(Subject):定義一個接口,聲明作為主題角色應該具備的方法(對觀察者對象的增刪改之類的方法聲明)。
主題角色(Concrete Subject):實現了抽象主題角色,實現了它的所有方法,并且含有一個抽象觀察者角色的集合引用作為成員變量,也就是說一個主題角色可以擁有多個觀察者。
抽象觀察者角色(Observer):定義了一個接口,聲明最為觀察者角色應該具備的方法(這個方法是當觀察者收到通知后做出的反應,一般就是update)。
具體觀察者角色(Concrete Observer):實現抽象觀察者角色,主要是實現接口中的update方法。
5、模式優(yōu)點
? 觀察者模式:定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,這個主題對象在狀態(tài)發(fā)生變化時,會通知所有觀察者對象,是他們能夠自動更新自己。(也叫做 發(fā)布-訂閱模式)? ? 觀察者所做的工作其實就是解除耦合,讓耦合的雙方都依賴于抽象,而不是依賴于具體。從而使得各自的變化都不會影響另一邊的變化。
6、與類似模式比較
? 觀察者模式是我們最常使用的設計模式之一,尤其是jQuery前端時,對于事件的注冊都是觀察者模式的一個淋漓盡致的體現。? ? 觀察者和其他模式的比較,感覺差距很大。
轉載于:https://my.oschina.net/heweipo/blog/466249
總結
以上是生活随笔為你收集整理的小菜学设计模式——观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oslo.config资源
- 下一篇: WPF中设置了WindowStyle=N