Este artículo está dirigido a cualquier persona que, por primera vez, se encuentre con el concepto de patrones de diseño, haya escuchado el término singleton o haya implementado de alguna manera el patrón singleton pero no entendió lo que estaba sucediendo. ¡Bienvenido! Los estudiantes de CodeGym encuentran patrones de diseño por primera vez en el nivel 15, cuando el capitán les pide inesperadamente que "refuercen" su comprensión implementando el patrón Java Singleton con una implementación perezosa. Los estudiantes que escuchan sobre el patrón singleton por primera vez tienen muchas preguntas al instante: ¿qué demonios es un patrón de diseño? ¿Por qué lo necesitamos? ¿ Qué es un singletón ? Y finalmente, ¿qué es la implementación perezosa? Respondamos estas preguntas en orden.
Y el patrón singleton es solo uno de ellos.
con blackjack y números.y pasar mucho tiempo haciéndolo, o podría implementar uno que se haya entendido y descrito durante mucho tiempo. Lo mismo ocurre con los patrones de diseño. Además, con los patrones de diseño, el código se vuelve más estándar y, cuando se utiliza el patrón adecuado, es menos probable que se cometan errores, ya que los errores comunes del patrón se identificaron y eliminaron hace mucho tiempo. Además de todo lo demás, el conocimiento de los patrones ayuda a los programadores a entenderse mejor. Simplemente puede decir el nombre de un patrón en lugar de intentar proporcionar una explicación larga a sus compañeros programadores. En resumen, los patrones de diseño te ayudan a:
Para concluir este apartado, señalamos que todo el cuerpo de patrones de diseño se puede dividir en tres grandes grupos:
¿Qué demonios es un patrón de diseño?
Creo que un poco de historia es para responder a esta pregunta con la mejor comprensión. Hay cuatro autores de programación famosos (Erich Gamma, John Vlissides, Ralph Johnson y Richard Helm) a quienes se les ocurrió una idea interesante. Se dieron cuenta de que el desarrollo de software a menudo requería que resolvieran aproximadamente los mismos problemas y escribieran código estructurado de la misma manera. Entonces decidieron describir patrones típicos que a menudo necesitan usarse en la programación orientada a objetos. Su libro se publicó en 1994 con el título Design Patterns: Elements of Reusable Object-Oriented Software. El nombre del libro resultó ser demasiado largo y la gente comenzó a llamarlo simplemente el libro de la Banda de los Cuatro. La primera edición incluía 23 patrones. Posteriormente, se descubrieron docenas de otros patrones.Un patrón de diseño es una solución estandarizada a un problema común. |
¿Por qué necesitamos patrones de diseño?
Puedes programar sin conocer patrones: después de todo, para el Nivel 15, ya has escrito cientos de miniprogramas en CodeGym sin siquiera saber que existen. Esto sugiere que los patrones de diseño son un tipo de herramienta cuyo uso distingue al maestro del aficionado: los patrones de diseño describen cómo resolver adecuadamente un problema típico. Esto significa que conocer los patrones le ahorra tiempo. De esa manera, son similares a los algoritmos. Por ejemplo, podría crear su propio algoritmo de clasificación
|

Finalmente, el patrón singleton
Singleton es un patrón creacional . Este patrón garantiza que solo haya una instancia de una clase y proporciona un punto de acceso global para este objeto. De la descripción, debe quedar claro que este patrón debe aplicarse en dos casos:- cuando su programa requiere que no se cree más de un objeto de una clase en particular. Por ejemplo, un juego de computadora puede tener una clase de héroe y solo un objeto de héroe que describa al único héroe del juego.
- cuando necesite proporcionar un punto para el acceso global a un objeto. En otras palabras, debe hacer que el objeto esté disponible desde cualquier parte del programa. Por desgracia, no es suficiente simplemente crear una variable global, ya que no está protegida contra escritura: cualquiera puede cambiar el valor de la variable, por lo que el punto de acceso global del objeto podría perderse. Estas propiedades de un Singleton son necesarias, por ejemplo, cuando tiene un objeto que funciona con una base de datos y necesita acceder a la base de datos desde diferentes partes del programa. Un Singleton se asegurará de que nadie escriba código que reemplace la instancia creada anteriormente.
-
Encuentre un ejemplo de Singleton con inicialización diferida.
-
Cree tres clases únicas (Sol, Luna, Tierra) en archivos separados usando el mismo principio.
-
ImplementarPlanetainterfaz en las clases Sol , Luna y Tierra .
- En el bloque estático de la clase Solution llame alreadKeyFromConsoleAndInitPlanetmétodo.
-
Implementar elreadKeyFromConsoleAndInitPlanetfuncionalidad del método:
-
5.1. Lea un parámetro de cadena desde la consola
-
5.2. Si el parámetro es igual a uno de losPlanetaconstantes de la interfaz, cree el objeto thePlanet adecuado .
-
-
Debe darle a la clase un campo estático privado que almacene un solo objeto:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Haga que el constructor (predeterminado) sea privado. Esto significa que no se puede acceder fuera de la clase y no podrá devolver nuevos objetos:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Declare un método de creación estático que se usará para obtener el singleton:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION