2010-10-28 69 views
6

我在Delphi中發現了觀察者模式的不同實現,如: Sourcemaking Design PatternsDelphi Hobbyist在Delphi中實現觀察者模式的最佳方式

一般來說,在Delphi中實現觀察者的最佳方式是什麼?
我會說使用接口,因爲代碼更具可讀性。

+0

接口不是因爲代碼變得更具可讀性,而是因爲代碼變得更加分離。 – 2010-10-28 12:35:10

+0

這裏有另一個實現保持方便:http://blogs.teamb.com/joannacarter/2004/06/30/690 – 2010-10-28 13:02:00

回答

7

沒有「好」或「最好」的方式來實現的模式。
您選擇的實施取決於您想如何使用它。

例如,您也可以使用泛型功能(自Delphi 2009起可用)來簡化大量模式的使用。

如果您使用Pre Delphi-3版本,或者想要避免使用reference counting,則無法使用接口。
(當與傳統的基於Owner/Ownee的生命週期管理混合使用時,引用計數可以打開一個新的蠕蟲罐;請務必下載暴露來自正確祖先的接口的類 - 如TInterfacedObject - 並觀察您的生活時間管理)。

除了關於如何實現觀察者模式的「純」問題之外,能夠在Delphi中識別實現觀察者模式的類也是很好的。

例如TDataSet/TDataSource也實現了observer pattern
Data Aware Controls的整體概念取決於它,所有綁定通過TDataLink

我已經寫了基於該TDataLink一個TDataLinkReflector組件,這反映了TDataLinkTDataLinkReflector事件所有的虛擬方法。在TDataLinkReflector

基地我寫TDataAwareControlController組件確實都挺有趣的事情基礎上,TDataSet的,其中tfields和的TDataSource鏈接到TDataSet的數據感知控件(着色上只讀,要求等)。

但即使是一個看起來很簡單的事件,也可以視爲基於該模式(儘管事件是單播,所以只有一個觀察者可以觀看一個事件)。

另一個實現這個功能的類是TApplicationEvents;每個實例都可讓您聆聽TApplication上的任何事件。

我希望對Delphi中使用觀察者模式的位置有所瞭解。

--jeroen

PS:任何有興趣,我寫可能要看到CodeRage video mentioned here的組件。

+0

謝謝,非常翔實的答案。 – LaBracca 2010-10-28 12:58:47