Patrones de diseño en Java con ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Patrones de diseño en Java: guía completa con ejemplos



Los patrones de diseño (design patterns) son soluciones probadas para problemas típicos que surgen durante el desarrollo de software. En Java, estos patrones son especialmente demandados gracias al estricto paradigma orientado a objetos del lenguaje. El uso de patrones permite hacer el código más flexible, mantenible y escalable.



En este artículo, analizaremos tres grupos principales de patrones de diseño en Java: creacionales, estructurales y de comportamiento. Cada patrón irá acompañado de un ejemplo práctico de código.



Patrones creacionales (Creational Patterns)



Los patrones creacionales gestionan el proceso de creación de objetos, haciendo que el sistema sea independiente de la forma en que se construyen. Veamos dos de los patrones más populares: Singleton y Factory Method.



Singleton (Singleton)



Singleton garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a ella. Este patrón se utiliza a menudo para conexiones a bases de datos, registro de logs o almacenamiento en caché.



Ejemplo de implementación de un Singleton thread-safe en Java:



public class DatabaseConnection {    private static volatile DatabaseConnection instance;    private String connectionString;

private DatabaseConnection(String connectionString) { this.connectionString = connectionString; }

public static DatabaseConnection getInstance(String connectionString) { if (instance == null) { synchronized (DatabaseConnection.class) { if (instance == null) { instance = new DatabaseConnection(connectionString); } } } return instance; }

public void connect() { System.out.println("Conectando a " + connectionString); }}


Uso:



DatabaseConnection db = DatabaseConnection.getInstance("jdbc:mysql://localhost:3306/mydb");db.connect();


Factory Method (Factory Method)



Factory Method define una interfaz para crear un objeto, pero permite que las subclases modifiquen el tipo de objeto creado. Esto permite delegar la creación de instancias a las clases hijas.



Ejemplo de un factory method para crear diferentes tipos de notificaciones:



interface Notification {    void send(String message);}

class EmailNotification implements Notification { public void send(String message) { System.out.println("Enviando email: " + message); }}

class SMSNotification implements Notification { public void send(String message) { System.out.println("Enviando SMS: " + message); }}

abstract class NotificationFactory { public abstract Notification createNotification();

public void notifyUser(String message) { Notification notification = createNotification(); notification.send(message); }}

class EmailNotificationFactory extends NotificationFactory { public Notification createNotification() { return new EmailNotification(); }}

class SMSNotificationFactory extends NotificationFactory { public Notification createNotification() { return new SMSNotification(); }}


Uso:



NotificationFactory factory = new EmailNotificationFactory();factory.notifyUser("¡Su pedido ha sido confirmado!");


Patrones estructurales (Structural Patterns)



Los patrones estructurales describen formas de combinar clases y objetos para formar estructuras más grandes. Veamos el patrón Adapter (Adapter).



Adapter (Adapter)



Adapter permite que objetos con interfaces incompatibles trabajen juntos. Envuelve un objeto, proporcionando la interfaz necesaria para el cliente.



Ejemplo de un adaptador para integrar un sistema de registro antiguo

Blogs

Book Recommendations