2010-11-03 9 views

Respuesta

13

Encontré esto aquí en el sitio de IBM. Explica bastante bien el uso de una clase Logger Singleton.

Un ejemplo clásico de un singleton verdadero es un servicio de registro. Supongamos que tenemos un servicio de registro basado en eventos: los objetos del cliente solicitan que el texto se registre por enviando un mensaje al servicio de registro . Otros objetos realmente registran el texto en alguna parte (consola, archivo, lo que sea) al escuchar el servicio de registro para estas solicitudes de registro y al manejarlos. En primer lugar, observe que el servicio de registro de pasa la prueba clásica por ser un producto único:

  • Los solicitantes necesitan un objeto conocido a la que enviar solicitudes de registro . Esto significa un punto global de acceso .
  • Dado que el servicio de registro es un origen de evento único al que pueden registrarse múltiples oyentes , solo debe ser una instancia.

Aquí el enlace: Use your singletons wisely

Si no desea utilizar una clase singleton que tendría que hacer frente a la sincronización (escribir en un archivo, o lo que sea la corriente que usa) entre estos diferentes registrador instancias. Así que es mucho más fácil, cuando solo tienes una instancia global de Logger.

0

Depende del marco de trabajo de registro. Por lo general, desea que todos los mensajes vayan a un registro, por lo que desea que todos los códigos utilicen el mismo registrador. Pero la clase de registrador no tiene que ser un singleton para garantizar eso.

2

El problema principal es donde se conserva el registro real.

Si está escribiendo en un sistema de archivos, tener más de una instancia (y por lo tanto, probablemente, más de un hilo) puede resultar en un archivo ilegible.

En el sentido de que dependiendo del almacenamiento en búfer y otros mecanismos de bajo nivel, los mensajes de una escritura pueden terminar mezclados con mensajes (o partes de mensajes) de otros.

Esto puede ser un problema menor, pero es el único que puedo pensar en tener solo un objeto de escritura de registro (y por lo tanto en serie).

2

Si tiene más de una secuencia de registro con contenido diferente, puede usar varias instancias de la clase de registrador inicializada para las diferentes salidas.

Sin embargo, si solo tiene una secuencia de registro, tener múltiples instancias de clase de registrador conduce a una implementación más compleja, ya que las instancias deben trabajar juntas para administrar el recurso real. Considere por ejemplo un registrador que registra cada mensaje con un número de secuencia. Dos instancias tendrán que sincronizar sus contadores de secuencia, lo que les obliga a conocerse unos a otros, negociar aumentos de contador, etc.(La alternativa de tener contador compartido en un miembro de clase estática es equivalente a tener un registrador de singleton)

Cuestiones relacionadas