我在Delphi中發現了觀察者模式的不同實現,如: Sourcemaking Design Patterns和Delphi Hobbyist。在Delphi中實現觀察者模式的最佳方式
一般來說,在Delphi中實現觀察者的最佳方式是什麼?
我會說使用接口,因爲代碼更具可讀性。
我在Delphi中發現了觀察者模式的不同實現,如: Sourcemaking Design Patterns和Delphi Hobbyist。在Delphi中實現觀察者模式的最佳方式
一般來說,在Delphi中實現觀察者的最佳方式是什麼?
我會說使用接口,因爲代碼更具可讀性。
沒有「好」或「最好」的方式來實現的模式。
您選擇的實施取決於您想如何使用它。
例如,您也可以使用泛型功能(自Delphi 2009起可用)來簡化大量模式的使用。
如果您使用Pre Delphi-3版本,或者想要避免使用reference counting
,則無法使用接口。
(當與傳統的基於Owner/Ownee的生命週期管理混合使用時,引用計數可以打開一個新的蠕蟲罐;請務必下載暴露來自正確祖先的接口的類 - 如TInterfacedObject - 並觀察您的生活時間管理)。
除了關於如何實現觀察者模式的「純」問題之外,能夠在Delphi中識別實現觀察者模式的類也是很好的。
例如TDataSet/TDataSource也實現了observer pattern。
Data Aware Controls的整體概念取決於它,所有綁定通過TDataLink。
我已經寫了基於該TDataLink
一個TDataLinkReflector組件,這反映了TDataLink
在TDataLinkReflector
事件所有的虛擬方法。在TDataLinkReflector
基地我寫TDataAwareControlController組件確實都挺有趣的事情基礎上,TDataSet的,其中tfields和的TDataSource鏈接到TDataSet的數據感知控件(着色上只讀,要求等)。
但即使是一個看起來很簡單的事件,也可以視爲基於該模式(儘管事件是單播,所以只有一個觀察者可以觀看一個事件)。
另一個實現這個功能的類是TApplicationEvents;每個實例都可讓您聆聽TApplication上的任何事件。
我希望對Delphi中使用觀察者模式的位置有所瞭解。
--jeroen
PS:任何有興趣,我寫可能要看到CodeRage video mentioned here的組件。
謝謝,非常翔實的答案。 – LaBracca 2010-10-28 12:58:47
鏈接已損壞:'( – ramiromd 2013-08-11 01:17:03
這裏有一個緩存副本:https://web.archive .ORG /網絡/ 20050204002436/HTTP://itte.no/delphi/ObservedDemo。htm;) – 2014-03-24 22:04:37
接口不是因爲代碼變得更具可讀性,而是因爲代碼變得更加分離。 – 2010-10-28 12:35:10
這裏有另一個實現保持方便:http://blogs.teamb.com/joannacarter/2004/06/30/690 – 2010-10-28 13:02:00