Pregunta

  

Posible duplicado:
   Singleton: Cómo se debe usar

Siguiendo con la excelente pregunta anterior de Ewan Makepeace sobre el patrón de Singleton, pensé que preguntaría " ¿cuándo cree la Comunidad que es apropiado usar un Singleton? "

Permítame ofrecerle un ejemplo para criticar:

Tengo un " IconManager " semifallo. Comienza leyendo un archivo de propiedades que indica dónde se encuentran mis íconos en el disco, y luego lee todos los íconos y los almacena en caché para su uso futuro.

Los iconos se pueden usar en toda mi interfaz de usuario (pestañas, tablas, marcos, etc.) ... por lo tanto, acceder a ellos a través de un método Singleton estático es muy conveniente. También quiero asegurarme de que los íconos se lean una vez y solo una vez (si sería muy lento leerlos desde el disco cada vez que necesito uno) ¿La comunidad cree que este es un uso apropiado de un Singleton? Si no es así, ¿de qué otra forma podría haberse implementado?

¿Qué otros usos válidos de Singletons podrían haber?

¿Fue útil?

Solución

Su IconManager implementa el patrón de fábrica, construye íconos. Y probablemente solo necesitas una fábrica para construir íconos. Así que no hay problemas para este caso para usar un IMO de singleton. He construido software con varias de estas fábricas centralizadas y todo funcionó bien.

Vea también este hilo: Ejemplos más comunes de uso incorrecto de la clase de singleton

Otros consejos

Un enfoque alternativo sería crear una instancia de su clase que cargue los íconos y luego pasar una referencia a esta instancia a todos y cada uno de los controles que necesitan acceder a los recursos. De esa manera, en el futuro, podría tener más de un cargador de iconos y pasarlos según sea necesario. Más flexible para el futuro pero con la gran desventaja de hacerle pasar la referencia a millones de controles.

Un buen uso del singleton es cuando se accede a un recurso que solo puede tener una conexión activa. Hay muchos dispositivos de hardware que tienen esta limitación.

Supongamos que se está conectando a una cámara de CCTV que solo permite una conexión. El patrón Singleton crearía esta conexión en el primer uso y la mantendría abierta. Siempre que necesite una imagen de la cámara, posiblemente de varias fuentes, puede golpear el Singleton sabiendo que, al considerar otros problemas, la imagen estará disponible.

Si la cámara también tiene un tiempo de conexión inicial lento, mantener la conexión abierta de esta manera en lugar de abrirla, capturar una imagen y cerrarla de nuevo podría ser mucho más eficiente.

En realidad nunca he usado un singleton, pero no he usado mucho los patrones de diseño. Creo que son muy valiosos cuando otros patrones los llaman, como los patrones de Fábrica y Puerta de enlace. Sin embargo, casi nunca son buenos por sí mismos.

Es posible que desee considerar el Monostate Pattern que le da Todos los beneficios del singleton sin muchos de los inconvenientes. Esto también le permite tener un objeto rico que tiene un estado que simplemente tiene las propiedades globales que está buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top