2010-10-28 6 views
6

Encontré diferentes implementaciones del patrón de observador en Delphi, como: Sourcemaking Design Patterns y Delphi Hobbyist.La mejor manera de implementar el patrón de observador en Delphi

En general, ¿cuál es la mejor forma de implementar un observador en Delphi?
Yo diría que usar interfaces porque el código es más legible.

+0

No se trata de interfaces porque el código se vuelve más legible, sino porque el código se vuelve/está más desacoplado. –

+0

Aquí hay otra implementación para tener a mano: http://blogs.teamb.com/joannacarter/2004/06/30/690 –

Respuesta

7

No hay manera o "bueno" "mejor" para implementar patrones.
La implementación que elijas depende de cómo quieras usarla.

Por ejemplo, también puede utilizar la función de genéricos (disponible desde Delphi 2009) para simplificar el uso de muchos patrones.

Y si utiliza versiones Pre Delphi-3, o desea evitar reference counting no puede usar interfaces.
(El recuento de referencias puede abrir una nueva lata de gusanos cuando se combina con la gestión del tiempo de vida basada en Propietario/Ownee tradicional; asegúrese de bajar las clases que exponen las interfaces del ancestro correcto, como TInterfacedObject, y mire la administración de su tiempo de vida).

Además de la pregunta "pura" sobre cómo implementar el patrón del observador, también es bueno poder reconocer las clases en Delphi que implementan el patrón del observador. Por ejemplo, TDataSet/TDataSource también implementa el observer pattern.
Depende de todo el concepto de Data Aware Controls, todo vinculado a través de TDataLink.

He escrito un componente basado en el TDataLinkReflectorTDataLink, que refleja todos los métodos virtuales en TDataLink a eventos en TDataLinkReflector.

Base en TDataLinkReflector me escribió TDataAwareControlController componentes que hace todo tipo de cosas interesantes a datos Los controles Aware basados ​​en el TDataSet, sus tfields y la TDataSource une a la TDataSet (colorear en sólo lectura, es necesario, etc).

Pero incluso una cosa aparentemente simple como los eventos se puede ver como basada en ese patrón (aunque los eventos son de un solo molde, por lo que solo un observador puede ver un evento).

Otra clase que implementa esto es el TApplicationEvents; cada instancia te permite escuchar cualquiera de los eventos en TApplication.

Espero que arroje algo de luz sobre dónde se usan los patrones del observador en Delphi.

--jeroen

PD: Cualquier persona interesada en los componentes que he escrito puede ser que desee ver el CodeRage video mentioned here.

+0

Gracias, respuesta muy informativa. – LaBracca

Cuestiones relacionadas