Swing中慣用模式之觀察者

#定義

觀察者模式又叫 發(fā)布-訂閱 模式分俯,定義的兩個對象之間是一種一對多的強依賴關系肾筐,當一個對象的狀態(tài)發(fā)生改變,所有依賴它的對象

# 關鍵角色:

1.主題(Subject)

  抽象主題以及具體的主題

2.觀察者(Observer)

  抽象觀察者以及具體觀察者


圖片發(fā)自簡書App

##抽象理解:我們訂閱簡書中喜歡的欄目澳迫,一旦這個欄目有通知局齿,我們訂閱用戶會收到通知,我們作為具體觀察者 而訂閱欄目作為具體主題

swing的按鈕監(jiān)聽橄登,通過事件委托機制抓歼,進行分發(fā),來處理不同的事件拢锹,下面舉一個例子

```

package org2.main.swing;

import javax.swing.*;

/**

* Created by Administrator on 2017/4/5

* swing驅動事件

*/

public class MainFrame {

//定義個容器變量

JFrame f = null;

//定義個按鈕變量

JButton btn = null;

public MainFrame() {

//創(chuàng)建容器

f = new JFrame( "事件模型" );

//創(chuàng)建按鈕

btn = new JButton( "按鈕" );

//把按鈕添加到容器中

f.add( btn );

//設置容器大小

f.setSize( 300, 200 );

//把容器設置為 可見

f.setVisible( true );

//給按鈕添加事件處理

//在btn上注冊一個監(jiān)聽器

//(btn其實就是具體的主題對象)

//(而監(jiān)聽器就是具體的觀察者)

//當點擊按鈕時(其實也就是主題對象發(fā)生了改變)谣妻,就會觸發(fā)監(jiān)聽器事件(觀察者更新了)

btn.addActionListener( new MyListener() );

}

//main方法

public static void main( String[] args ) {

new MainFrame();

}

}

```

下面是事件具體處理



```

package org2.main.swing;


import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


/**

* Created by Administrator on 2017/4/5

* 定義一個監(jiān)聽器(具體觀察者)

*/

public class MyListener implements ActionListener {


//該方法類似于觀察中的update方法

@Override

public void actionPerformed( ActionEvent e ) {

System.out.println( "按鈕被點擊,執(zhí)行一些業(yè)務邏輯操作" );

}

}

```




#總結

  總的來說卒稳,觀察者模式所做的工作其實就是在解除耦合蹋半。讓耦合雙方都依賴抽象,

而不是具體充坑。從而使得各自的變化都不影響其他一方减江。這也符合了依賴倒置原則。

#使用原則

1.當一個對象的改變需要同時改變其他對象時捻爷。

2.一個對象不知道它的改變會影響多少個類的改變辈灼。

3.當有一個抽象模型有兩個方面,一面依賴另一面也榄。這時觀察者模式可以很好地

將兩者封裝在獨立的對象使它們各自獨立改變和復用巡莹。

最后:重寫組件時可能運用到觀察者模式,在數(shù)據(jù)處理,數(shù)據(jù)更新降宅,通知其他消息組件時骂远,都可以運用到!

#缺點

觀察者設計模式中需要每個觀察者重寫通知方法腰根,但是實際運用中激才,不可能能每個觀察者都有通知方法,那么怎么解決這個問題呢唠雕,那就是運用消息隊列來處理贸营,擁有消息通知方法的觀察者發(fā)布消息到隊列中,實際主題只需要設計響應的方法從消息隊列中取出消息數(shù)據(jù)即可岩睁!提供實際類

參考

java.util.concurrent.BlockingQueue;

java.util.concurrent.LinkedBlockingQueue;

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钞脂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捕儒,更是在濱河造成了極大的恐慌冰啃,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刘莹,死亡現(xiàn)場離奇詭異阎毅,居然都是意外死亡,警方通過查閱死者的電腦和手機点弯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門扇调,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抢肛,你說我怎么就攤上這事狼钮。” “怎么了捡絮?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵熬芜,是天一觀的道長。 經(jīng)常有香客問我福稳,道長涎拉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任的圆,我火速辦了婚禮鼓拧,結果婚禮上,老公的妹妹穿的比我還像新娘越妈。我一直安慰自己毁枯,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布叮称。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓤檐。 梳的紋絲不亂的頭發(fā)上赂韵,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音挠蛉,去河邊找鬼祭示。 笑死,一個胖子當著我的面吹牛谴古,可吹牛的內(nèi)容都是我干的质涛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼掰担,長吁一口氣:“原來是場噩夢啊……” “哼汇陆!你這毒婦竟也來了?” 一聲冷哼從身側響起带饱,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤毡代,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勺疼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體教寂,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年执庐,在試婚紗的時候發(fā)現(xiàn)自己被綠了酪耕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡轨淌,死狀恐怖迂烁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猿诸,我是刑警寧澤婚被,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站梳虽,受9級特大地震影響址芯,放射性物質發(fā)生泄漏。R本人自食惡果不足惜窜觉,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一谷炸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禀挫,春花似錦旬陡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驶睦。三九已至,卻和暖如春匿醒,著一層夾襖步出監(jiān)牢的瞬間场航,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工廉羔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溉痢,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓憋他,卻偏偏與公主長得像孩饼,于是被迫代替她去往敵國和親台猴。 傳聞我的和親對象是個殘疾皇子侦锯,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 訂閱報紙的過程## 來考慮實際生活中訂閱報紙的過程,這里簡單總結了一下琅摩,訂閱報紙的基本流程...
    七寸知架構閱讀 4,631評論 5 57
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理此迅,服務發(fā)現(xiàn)汽畴,斷路器,智...
    卡卡羅2017閱讀 134,704評論 18 139
  • 觀察者模式定義了一種一對多的依賴關系耸序,讓多個觀察者對象同時監(jiān)聽某一個主題對象忍些。這個主題對象在狀態(tài)上發(fā)生變化時,會通...
    扈扈哈嘿閱讀 1,331評論 0 12
  • 面向對象主要針對面向過程坎怪。 面向過程的基本單元是函數(shù)罢坝。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,059評論 0 4
  • 這星期一直在看度陰山著作,知行合一王陽明心法搅窿,從書中我了解到王陽明心法并不像外界看起來如此困難嘁酿,它就圍繞一個點良知...
    陳腦院閱讀 550評論 4 2