Al diseñar una API que proporciona una interfaz de escucha de eventos, parece que hay dos formas conflictivas de tratar las llamadas para agregar / quitar escuchas:
Múltiples llamadas a addListener solo agregarán un único oyente (como agregarlo a un conjunto); se puede eliminar con una sola llamada a removeListener.
Múltiples llamadas a addListener agregarán un oyente cada vez (como agregarlo a una lista); debe estar equilibrado por varias llamadas para eliminarListener.
He encontrado un ejemplo de cada uno: (1) - La llamada DOM addEventListener en los navegadores solo agrega oyentes una vez, ignorando silenciosamente las solicitudes para agregar el mismo oyente por segunda vez y (2) - El .oncomportamiento de jQuery agrega oyentes varias veces .
La mayoría de las otras API de escucha parecen usar (2), como SWT y oyentes de eventos Swing. Si se elige (1), también está la cuestión de si debería fallar silenciosamente o con un error cuando hay una solicitud para agregar el mismo oyente dos veces.
En mis implementaciones, tiendo a seguir con (2) ya que proporciona una interfaz de tipo de configuración / desmontaje más limpia y revela errores en los que la 'configuración' se realiza involuntariamente dos veces, y es consistente con la mayoría de las implementaciones que he visto.
Esto me lleva a mi pregunta: ¿hay una arquitectura particular u otro diseño subyacente que se preste mejor a la otra implementación? (es decir, ¿por qué existe el otro patrón?)
foo== bar, entonces se sobrescribiría, de lo contrario, tendría uno fooy uno barcomo oyentes. Si siempre sobrescribe, no sería un conjunto, sino un solo objeto que representara un observador.
addListener(foo); addListener(foo); addListener(bar);. ¿Su caso # 1 agrega unofooy unobar, o solobar(es decir, sebarsobrescribefoocomo el oyente)? En el caso # 2, ¿sefoodispararía dos veces o una vez?