2016-02-25 75 views
2

我試圖學習設計模式,並且我已經帶有觀察者模式。我認爲我理解這個概念本身,但我沒有看到何時使用它。觀察者設計模式在休息應用程序

我試圖解釋自己。我主要使用Web應用程序,所以無狀態應用程序。通常,客戶端從瀏覽器發出請求(例如更新記錄)。那麼操作完成。

讓我們假設我想每次更新記錄時通知一些人。在我看來,觀察者模式是完美的場景,但是當我想到它時,它會結束如下:

  • 用戶請求更新。
  • 得到所有必須通知的人。
  • 把所有必須通知觀察員的人員。
  • 進行更新。 (這也將通知觀察者模式)。

但是......這樣做,我必須迭代所有我想通知兩次的人

而且由於它是一個無狀態應用程序,我必須去獲取所有人,而不是每次都需要通知!

我不知道觀察者模式是否對其他類型的應用程序更有用,但我只能想到這種模式的靜態形式,我的意思是讓觀察者靜態。

我知道我正在失去一些東西,這是一種常見的和可以接受的模式,每個人都接受它作爲這個具體問題的有效解決方案。我不理解?

回答

2

首先,讓我們理清術語。

  • 想要被通知的每個人是觀察員
  • 可觸發通知的每種類型的事件是Observable

每個觀察者(人)需要向服務器註冊自己。它發送一個請求,基本上說,「我對foo Observables感興趣」,在這種情況下,「我對更新事件感興趣」。服務器維護誰對哪些事件感興趣的映射。

每次服務器進行更新時,它都會迭代更新觀察者的映射並向其中的每一個發送通知。

優點是服務器及其Obserbles沒有關於觀察者是誰的編譯時知識。觀察者可以在運行時自由註冊(並取消註冊)他們自己感興趣的任何事件。

+0

我同意這個問題,並且我不知道這個問題本身是否是觀察者模式。我的意思是,如果我將所有想要註冊的人都保存在數據庫表中,然後恢復所有這些註冊表並通知他們,那麼對於編程人員和服務器來說,這樣做的效果會相同。但我不認爲這是一種可觀察的設計模式,或者它是? –

+1

在觀察者模式中,程序員不知道觀察者是誰。觀察者自己控制他們觀察的內容和時間;他們可以隨時改變他們觀察到的情況。 – jaco0646

+0

我想我明白你的意思......不是關於表現,而是關於靈活性......好,我仍然沒有完全得到它,但我想我有一些想法想想。 –