He leído en muchos lugares que los singleton pueden usar interfaces. De alguna manera no puedo comprender esto.¿Cómo puede una clase singleton usar una interfaz?
Respuesta
Cada clase puede implementar una interfaz, y Singleton es solo una clase "normal" que se asegura de que exista una sola instancia en un momento dado, aparte de la otra lógica empresarial que pueda implementar. Esto también significa que un Singleton tiene al menos 2 responsabilidades y este no es un buen diseño de OO ya que las clases solo deben tener 1 responsabilidad y asegurarse de que sean buenas en esa responsabilidad, pero esa es otra discusión.
Un singleton tiene una instancia, simplemente nunca tiene más de una instancia. Probablemente use un par de miembros estáticos para buscar referencias y para asegurarse de que nunca se multipliquen, pero en su mayor parte la clase es igual a cualquier otra clase.
Algo así como:
public interface MyInterface
{
}
Y
public class MySingleton implements MyInterface
{
private static MyInterface instance = new MySingleton();
private MySingleton()
{
}
public static MyInterface getInstance()
{
return instance;
}
}
Necesita agregar un constructor no-args privado a esa clase para convertirlo en un singleton. –
Para su información, la mejor manera en Java para implementar un Singleton es mediante el uso de una enumeración de un solo elemento.Es más conciso que el enfoque de campo público y proporciona el mecanismo de serialización de forma gratuita y también proporciona seguridad contra los ataques de reflexión. Este método aún no se ha adoptado ampliamente, pero podría ser interesante saberlo. Para obtener más información, consulte el artículo al respecto en "Java eficaz" por Joshua Bloch. – nkr1pt
@Andrew: gracias, estaba saltando entre SO y el trabajo del día y lo perdí por accidente :-) –
Básicamente, una clase singleton es una clase que se puede instanciar una y sólo una vez. El patrón de clase singleton se implementa mediante el uso de un método estático para obtener la instancia de la clase singleton y restringir el acceso a su (s) constructor (es).
Al igual que con el uso de una interfaz, sería similar a la forma en que cualquier otra clase implementaría una interfaz.
Y tampoco debería permitir la clonación de ese objeto.
Creo que entendí su problema. Desea definir el método de fábrica en la interfaz (método estático para getInstance()). Pero como el método de fábrica no se puede definir en la interfaz, esa lógica no funcionará.
Una opción es tener una clase de fábrica que contenga ese método estático. Por lo que habrá tres clases primera clase para mantener estática método segunda es la interfaz tercera es la clase concreta
, pero no podemos hacer que el constructor privado de hormigón.
Pero si su infraestructura cuenta con dos paquetes uno para público y otro para uso privado
definir la interfaz en público, realizar nivel de paquete de clase concreta (sin ningún modificador de acceso) y la clase de fábrica y el método estático sean públicas.
Espero que esto pueda ayudarlo.
- 1. Force Singleton Pattern en una clase que implementa una interfaz
- 2. ¿Puede una clase extender una clase e implementar una interfaz?
- 3. Hacer una clase singleton sin usar el método estático
- 4. ¿Puede una clase anónima de C# implementar una interfaz?
- 5. ¿Cómo puede una clase anónima usar "extender" o "implementar"?
- 6. ¿Se puede implementar una interfaz en una clase Linq2Sql?
- 7. Cómo generar una clase desde una interfaz
- 8. ¿Está extendiendo una clase singleton incorrecta?
- 9. ¿Cómo puedo probar una clase de Singleton con DUnit?
- 10. Establecer @property de una clase Singleton
- 11. La extensión de una clase Singleton
- 12. En C#, ¿puede una clase heredar de otra clase y una interfaz?
- 13. ¿Puede una clase C# heredar atributos de su interfaz?
- 14. 'Miembro protegido en clase sellada' advertencia (una clase singleton)
- 15. ¿Cómo puedo implementar una clase singleton abstracta en Java?
- 16. ¿Puede una interfaz contener una variable?
- 17. Creando una clase singleton con dispatch_once para clase hiearchy
- 18. ¿Se puede compartir una clase Singleton dentro de una DLL en todos los procesos?
- 19. Singleton clase en Flex
- 20. ¿Cómo puedo implementar una clase singleton en Perl?
- 21. Cómo crear una clase Singleton de proceso cruzado en Java
- 22. ¿Cómo marco una clase como singleton en UML?
- 23. clase estática vs clase singleton
- 24. ¿Puedo usar Activator.CreateInstance con una interfaz?
- 25. ¿Cómo se decide entre usar una clase abstracta y una interfaz?
- 26. C# ¿Cómo verificar si una clase implementa una interfaz genérica?
- 27. ¿Por qué una interfaz no puede implementar otra interfaz?
- 28. Encuadernación una clase a varias interfaces como Singleton
- 29. ¿Se puede burlar de un objeto que implementa una interfaz Y una clase abstracta?
- 30. ¿Es una mala práctica usar el módulo requireJS como singleton?
¿Por qué un Singleton no es bueno OO design? De hecho, es uno de los patrones de diseño de OO más comunes. –
@ChristianVielma: (Sí, tarde) El problema es que crea * estado global *, al igual que * variables globales *, y adolece de problemas similares. Por ejemplo, es difícil probar las clases que solicitan internamente singleton sin conocimiento externo. ¿Su DB de producción está lleno de basura/datos de prueba? Verifique los singletons. Buscando un error? Si tiene singletons, y por lo tanto estado global, no puede enfocarse solo en un alcance limitado; debes tener en mente el código base. Gracias a Singleton. Tenga en cuenta que esto se trata del patrón singleton *, no de los objetos singleton *. El uso común no significa que debe ser "bueno". – ray