觀察者模式!

2021-07-23 23:06:59 字數 2688 閱讀 8281

放棄該放棄的是無奈,放棄不該放棄的是無能,不放棄該放棄的是無知,不放棄不該放棄的是執著!

今天,我們學習設計模式中的觀察者模式,我們先不說何為觀察者模式,我們先來舉個生活中的列子,比如,你在街上看到乙個美女,但是你不好意思上去要**,打招呼,於是你就一直在盯著她,然後姑娘也發現了你,看你小夥子還不錯,於是給你乙個顏色,意思是說他對你感覺還行,這時你有了信心,然後你上去成功的勾搭上了妹子。這其實就是我們接下來要說的觀察者模式,你就是觀察者,美女就是被觀察者,美女給了你個訊號,於是你就做出了動作。ok!

下面我們來先看一下觀察者模式的定義和好處,懂的人可以直接看**!

定義:

定義物件間一種一對多的依賴關係,使得每乙個物件改變狀態,則所有依賴於它的物件都會得到通知並自動更新。當然,乙個被觀察者(observable)能有多個觀察者(observer),乙個觀察者也可以觀察多個被觀察者。是不是感覺很簡單呢??

現在我們就以開篇的列子稍作修改來寫乙個觀察這模式的例子:

比如很多男孩子都在追乙個女孩子,女孩子給了他們乙個眼色,所有的男孩子都上去噓寒問暖。

我們先寫觀察者物件(observer),我們的boy

public

class boy

public

void

update()

}

接下來是我們的被觀察者(observable),我們的girl。

public

class girl

public

void

notification()}}

然後我們執行**在這裡:

public

class main

}

哈哈,是不是很簡單,我們再看看執行結果吧!

妹子說:妹子我看你們挺不錯的!

1張三說:女孩,能要個**嗎?

2王五說:女孩,能要個**嗎?

3李四說:女孩,能要個**嗎?

我們是不是實現了我們的例子?簡單吧!對觀察者模式就是這麼簡單,第一次看的話可能不好理解,但是多看幾次,你的思想就會擴散開來,能深入理解。

其實,jdk中給我們封裝好了observer和obervable,我們只需要繼承便可完成我們的觀察者模式,在學習之前,我們來張美圖放鬆一下。

接下來,我們看使用jdk裡面的observer和observable是何等的簡單。

首先observer是個介面,我們只需要實現裡面的update()方法即可

@override

public

void

update(observable o, object arg)

o:你觀察的那個被觀察者物件

arg:被觀察者給你傳過來的引數

而observable是乙個父類。我們可以很輕鬆的呼叫和重寫裡面的方法

下面是我們可以呼叫和重寫的方法:

observable()

addobservable(observer o)

deleteobservable(observer o)

notifyobservers()

notifyobservers(object args)

deleteobservers();

setchanged();

clearchanged();

haschanged();

counobservers();

方法很簡單,看意思就能猜出方法的意思和用途:

那麼下面我們來舉個例子:

比如說,如果你乙個月的工資在一萬以上,你女朋友每個月給你100塊錢零花錢,但是你乙個月的工資在一萬以下,你女朋友每個月給你50塊錢零花錢,啊,是夠苛刻的!!!

我們看一下在你賺的錢少於10000 的**:

先看女朋友的**:

public

class

girl

extends

observable else }}

接下來是描述你的**:

public

class

boyimplements

observer

public

boy(int salary)

@override

public

void

update(observable o, object arg)

}

接下來我們看你的工資少於10000時候的主工程!

public

class main

}

ok,寫到這裡我們就搞定了,我們看下執行結果:

我這個月的零花錢為50
那麼我們將錢改個數大於10000呢?

public

class main

}

看下結果

我這個月的零花錢為100

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...

觀察者模式

觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...

觀察者模式

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...