設(shè)計(jì)模式1(觀察者模式)

初步認(rèn)知

觀察者模式:是一種單項(xiàng)的發(fā)布/訂閱的廣播模式频鉴。其實(shí)缺厉,簡(jiǎn)單來(lái)講就一句話:當(dāng)一個(gè)對(duì)象變化時(shí)歼狼,其它依賴該對(duì)象的對(duì)象都會(huì)收到通知,并且隨著變化鹿榜!對(duì)象之間是一種一對(duì)多的關(guān)系施敢。

簡(jiǎn)易架構(gòu)

觀察者模式

實(shí)例分析

觀察者接口:

public interface Observe {

public void invoke(String message);

}

兩個(gè)觀察者實(shí)現(xiàn)類:

public class ObserveImpl1implements Observe {

@Override

? ? public void invoke(String message) {

System.out.println("ObserveImpl1 is executing now!the message is :"+message);

? ? }

}



public class ObserveImpl2implements Observe {

@Override

? ? public void invoke(String message) {

System.out.println("ObserveImpl2 is executing now,the message is :"+message);

? ? }

}

發(fā)布者接口:

public interface Publish {

/* *

添加觀察者

*/

? ? public void add(Observe obv);

? ? /* *

刪除觀察者

*/

? ? public void del(Observe obv);

? ? /**

*通知所有觀察者

*/

? ? public void notifyAllObverves(String notifyMessage);

? ? /**

* 自身操作方法

*/

? ? public void epration(String messge);

}

發(fā)布者抽象類:

/**

* 此抽象類主要用于對(duì)觀察者進(jìn)行管理

*/

public abstract class PublishImplimplements Publish

{

//在發(fā)布者中心的觀察者管理列表

? ? private Vectorobserves =new Vector();

? ? /**

* 添加觀察者

? ? * @param obv

? ? */

? ? @Override

? ? public void add(Observe obv) {

observes.add(obv);

? ? }

/**

* 刪除觀察者

? ? * @param obv

? ? */

? ? @Override

? ? public void del(Observe obv) {

observes.remove(obv);

? ? }

/**

* 給所有觀察者發(fā)布通知

? ? * @param notifyMessage

? ? */

? ? @Override

? ? public void notifyAllObverves(String notifyMessage) {

Enumeration? elements =observes.elements();

? ? ? while(elements.hasMoreElements()){

elements.nextElement().invoke(notifyMessage);

? ? ? }

}

}

發(fā)布者實(shí)現(xiàn)類:

public class MyPublishextends PublishImpl {

@Override

? ? public void epration(String messge) {

System.out.println("the operation method is starting now!");

? ? ? ? notifyAllObverves(messge);

? ? }

}

觀察模式測(cè)試類:

public class TestOfObserve {

public static void main(String[] args) {

Observe ob1 =new ObserveImpl1();

? ? ? ? Observe ob2 =new ObserveImpl2();

? ? ? ? MyPublish publish =new MyPublish();

? ? ? ? publish.add(ob1);

? ? ? ? publish.add(ob2);

? ? ? ? System.out.println("model of observe start now!");

? ? ? ? /**

* 發(fā)送第一個(gè)通知

*/

? ? ? ? String first ="天亦有情天亦老";

? ? ? ? publish.epration(first);

? ? ? ? /**

* 發(fā)送第二個(gè)通知

*/

? ? ? ? String second ="人間正道是滄桑";

? ? ? ? publish.epration(second);

? ? }

}

執(zhí)行結(jié)果

model of observe start now!

the operation method is starting now!

ObserveImpl1 is executing now!the message is :天亦有情天亦老

ObserveImpl2 is executing now,the message is :天亦有情天亦老

the operation method is starting now!

ObserveImpl1 is executing now!the message is :人間正道是滄桑

ObserveImpl2 is executing now,the message is :人間正道是滄桑

總結(jié)

一個(gè)發(fā)布者發(fā)布了兩次通知,兩個(gè)觀察者都實(shí)時(shí)接收到了相應(yīng)的通知信息并且隨著通知的變化進(jìn)行實(shí)時(shí)的響應(yīng)辐脖。

這種模式觀察者必須注冊(cè)到發(fā)布者管理中心饲宛,由發(fā)布者中心統(tǒng)一管理(維護(hù)所有觀察者,也就是增刪改查等以及發(fā)布通知操作)

這種模式在程序設(shè)計(jì)實(shí)踐中適合橫向的切面操作嗜价。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艇抠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子久锥,更是在濱河造成了極大的恐慌家淤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑟由,死亡現(xiàn)場(chǎng)離奇詭異絮重,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)错妖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門绿鸣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人暂氯,你說(shuō)我怎么就攤上這事潮模。” “怎么了痴施?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵擎厢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我辣吃,道長(zhǎng)动遭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任神得,我火速辦了婚禮厘惦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哩簿。我一直安慰自己宵蕉,他們只是感情好酝静,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羡玛,像睡著了一般别智。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稼稿,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天薄榛,我揣著相機(jī)與錄音,去河邊找鬼让歼。 笑死敞恋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谋右。 我是一名探鬼主播耳舅,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼倚评!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起馏予,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤天梧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后霞丧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呢岗,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蛹尝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了后豫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡突那,死狀恐怖挫酿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愕难,我是刑警寧澤早龟,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站猫缭,受9級(jí)特大地震影響葱弟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猜丹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一芝加、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧射窒,春花似錦藏杖、人聲如沸将塑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抬旺。三九已至,卻和暖如春祥楣,著一層夾襖步出監(jiān)牢的瞬間开财,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工误褪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留责鳍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓兽间,卻偏偏與公主長(zhǎng)得像历葛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嘀略,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354