usar patrones patron ejercicios ejemplos diseño cuando conexion class static singleton

class - patrones - Ventaja de la clase estática sobre el uso de Singleton



patrones de diseño java ejemplos (6)

Duplicar

¿Qué pasa con Singleton?
Singletons: ¿buen diseño o una muleta?
Singleton: ¿Cómo debería usarse?
¿Qué hay de malo en Singletons?

Puede encontrar numerosas razones para usar un Singleton en una clase estática. Pero seguramente debe haber algunas situaciones en las que es mejor usar una clase estática antes de un Singleton. ¿Qué son?


Habiendo luchado con la capacidad de prueba de los consumidores de clases estáticas a lo largo de los años, puedo decir honestamente que son obra de mentes malvadas. En serio, usaría clases estáticas para métodos de extensión en C # pero no en otro lugar.


La clase estática es mejor para cuando no necesita cambiar la implementación. Con Singleton, puede tener una interfaz con varias implementaciones. Una clase estática, solo puede ser una implementación.


Puedes usar clases estáticas cuando:

1) todos sus métodos son utilidades (buen ejemplo - clase Math)

2) no quieres ocuparte de preservar tu instancia del recolector de basura (en applets), pero sería mejor usar singleton allí

3) estás absolutamente seguro de que no se convertirá en estado en el futuro y estás seguro de que siempre necesitarás solo una instancia de esa clase

Si está utilizando singleton y en un momento se da cuenta de que necesita varias instancias, su singleton se puede transformar fácilmente en multitono, pero tendrá un problema con la clase estática


Si su clase no almacena ningún estado, entonces use una clase Estática.

Si almacena estado y necesita una sola instancia, entonces (tal vez) use un Singleton.

De lo contrario, use una clase regular.


Siempre es donde realmente no necesita pasar la instancia singleton en cualquier lugar. Por ejemplo, singleton será útil si implementa alguna interfaz, no puede hacerlo con una clase estática.

Recuerde, cada instancia de Class es un singleton, administrado por JVM. Entonces la clase estática es un singleton.


Un singleton es una clase de la cual solo una instancia puede ser instanciada, mientras que no hay ninguna instancia asociada con un método estático.

Si puede implementar la función que desea con un solo método estático, entonces ese es probablemente su mejor enfoque, porque es más fácil de implementar. Considere los métodos de extensión: son solo métodos estáticos con azúcar sintáctico. Si puede ver lógicamente el método estático como ayudante de una clase existente, entonces tiene sentido usar un método estático.

Por otro lado, si hay algún tipo de estado involucrado en la funcionalidad que está tratando de lograr, entonces probablemente sea mejor usar un Singleton en su lugar. El objeto Singleton puede contener / administrar su estado y administrar el acceso / subprocesamiento concurrente, mientras que esto se vuelve mucho más complicado con clases estáticas y métodos estáticos. Si está utilizando Singleton''s en C #, le recomiendo leer el artículo de Jon Skeet sobre la implementación adecuada de Singleton, que está disponible en http://www.yoda.arachsys.com/csharp/singleton.html .

Singleton es más comparable a clases estáticas que métodos estáticos. Una gran ventaja que tienen los singleton en esta comparación es que pueden implementar interfaces y derivar de clases base. Esto le permite desacoplar sus implementaciones de sus interfaces. Por ejemplo, si tengo una interfaz IAccountService en mi ensamblado central con una implementación Singleton, SingletonAspNetAccountService en mi capa de servicio, entonces puedo inyectar IAccountService en mi capa UI con un contenedor IoC, sin requerir una dependencia en mi capa de servicio en la UI capa. Por otro lado, si tuviera una clase de Accounts estática, tendría que crear un adaptador para los métodos de la clase estática o tener una dependencia en la capa de servicio en mi UI para acceder a la funcionalidad de la cuenta estática.