2009-06-03 60 views

回答

19

這將是Observer Pattern - 維基百科

觀察者模式(一個所述 異步的子集發佈/訂閱 圖案)是一個設計模式 在其中一個對象,稱爲 受試者保留其被稱爲觀察員的 家屬的列表,並且 自動通知他們任何 狀態變化,通常通過調用其方法的一個 來通知他們。它主要用於實現分佈式事件處理 系統的 系統。

+3

觀察者模式類似於發佈 - 訂閱模式,而不是回調。有一次,觀察者模塊在調用Observable模塊後沒有被「回調」。 Observable呼籲觀察者通知他們狀態的變化。 – 2016-01-22 21:01:17

9

回調是一種形式戰略設計模式

+1

我同意策略是一個更好的類比Observer。對我來說,回調將是一個函數指針或閉包。由於這些構造不是所有語言都可用的,因此策略就是最近似的。根據你的觀點,你有(錯)幸運的必須創建你選擇的設計模式所需的各種接口。 – Patrick 2009-06-03 20:22:06

4

External polymorphism很好的描述 - 一個對象具有到另一個對象和一個函數來在該對象上調用的參考。它可以被視爲單一類型,因此您可以混合和匹配對象和函數來調用事件。代表是這種模式的一個例子。這更像是一種C#風格的方法。

Observer pattern - 您使用對象可以實現的接口/基類,並將此接口註冊到事件。更多的Java風格的方法。

檢查我這裏張貼了一個C答案++爲代表/外部多態性的解決方案: raw function pointer from a bound method

15

這取決於回調是如何使用的。設計模式都是關於傳達你的意圖。

如果你打算讓「在未來的某個時候」要註冊一個或多個回調,它們可以被稱爲通知,你說的觀察員。另外 - 在這種情況下,回調的實際調用通常是「可選的」或基於某種刺激觸發。 (回調可能會也可能不會被調用)

如果您打算傳入「要做的事情」,並在方法中完成(或者用於在後面的過程中「做些事情」),重新談論戰略。另外 - 實際的調用通常會發生。

需要注意的是完全相同的代碼可能是因爲存在 - 這是真正關心你是如何思考的問題,以及如何你希望別人想一想。

+0

我最喜歡這個答案 – 2012-10-09 02:39:08

1

你提的問題是非常普遍的,最普遍的答案我能想到的是,當你有需要回調的問題使用多態。

多態性允許你指定的接口形式,有關你的回調是如何被使用的軟件合同(或抽象類)。然後客戶可以自由選擇他們認爲適合他們目的的界面的任何實現。

無論是建議使用狀態,策略,觀察者模式或完全不同的東西真的要看情況而定。

0

我同意關於觀察者模式的其他海報。它是專門爲此目的而設計的。