一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

在 Java8 環(huán)境下實現(xiàn)觀察者模式的實例分析

大?。?/span>0.5 MB 人氣: 2017-10-12 需要積分:1
觀察者(Observer)模式又名發(fā)布-訂閱(Publish/Subscribe)模式,是四人組(GoF,即 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)在1994合著的《設計模式:可復用面向?qū)ο筌浖幕A》中提出的(詳見書中293-313頁)。盡管這種模式已經(jīng)有相當長的歷史,它仍然廣泛適用于各種場景,甚至成為了標準Java庫的一個組成部分。目前雖然已經(jīng)有大量關于觀察者模式的文章,但它們都專注于在 Java 中的實現(xiàn),卻忽視了開發(fā)者在Java中使用觀察者模式時遇到的各種問題。
  本文的寫作初衷就是為了填補這一空白:本文主要介紹通過使用 Java8 架構實現(xiàn)觀察者模式,并在此基礎上進一步探討關于經(jīng)典模式的復雜問題,包括匿名內(nèi)部類、lambda 表達式、線程安全以及非平凡耗時長的觀察者實現(xiàn)。本文內(nèi)容雖然并不全面,很多這種模式所涉及的復雜問題,遠不是一篇文章就能說清的。但是讀完本文,讀者能了解什么是觀察者模式,它在Java中的通用性以及如何處理在 Java 中實現(xiàn)觀察者模式時的一些常見問題。
  觀察者模式
  根據(jù) GoF 提出的經(jīng)典定義,觀察者模式的主旨是:
  定義對象間的一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。
  什么意思呢?很多軟件應用中,對象之間的狀態(tài)都是互相依賴的。例如,如果一個應用專注于數(shù)值數(shù)據(jù)加工,這個數(shù)據(jù)也許會通過圖形用戶界面(GUI)的表格或圖表來展現(xiàn)或者兩者同時使用,也就是說,當?shù)讓訑?shù)據(jù)更新時,相應的 GUI 組件也要更新。問題的關鍵在于如何做到底層數(shù)據(jù)更新時 GUI 組件也隨之更新,同時盡量減小 GUI 組件和底層數(shù)據(jù)的耦合度。
  一種簡單且不可擴展的解決方案是給管理這些底層數(shù)據(jù)的對象該表格和圖像 GUI 組件的引用,使得對象可以在底層數(shù)據(jù)變化時能夠通知 GUI 組件。顯然,對于處理有更多 GUI 組件的復雜應用,這個簡單的解決方案很快顯示出其不足。例如,有20個 GUI 組件都依賴于底層數(shù)據(jù),那么管理底層數(shù)據(jù)的對象就需要維護指向這20個組件的引用。隨著依賴于相關數(shù)據(jù)的對象數(shù)量的增加,數(shù)據(jù)管理和對象之間的耦合度也變得難以控制。
  另一個更好的解決方案是允許對象注冊獲取感興趣數(shù)據(jù)更新的權限,當數(shù)據(jù)變化時,數(shù)據(jù)管理器就會通知這些對象。通俗地說就是,讓感興趣的數(shù)據(jù)對象告訴管理器:“當數(shù)據(jù)變化時請通知我”。此外,這些對象不僅可以注冊獲取更新通知,也可以取消注冊,保證數(shù)據(jù)管理器在數(shù)據(jù)變化時不再通知該對象。在 GoF 的原始定義中,注冊獲取更新的對象叫作“觀察者”(observer),對應的數(shù)據(jù)管理器叫作“目標”(Subject),觀察者感興趣的數(shù)據(jù)叫作“目標狀態(tài)”,注冊過程叫“添加”(attach),撤銷觀察的過程叫“移除”(detach)。前文已經(jīng)提到觀察者模式又叫發(fā)布-訂閱模式,可以理解為客戶訂閱關于目標的觀察者,當目標狀態(tài)更新時,目標把這些更新發(fā)布給訂閱者(這種設計模式擴展為通用架構,稱為發(fā)布——訂閱架構)。這些概念可以用下面的類圖表示:
  在 Java8 環(huán)境下實現(xiàn)觀察者模式的實例分析

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?