Patrones de Diseño en Java

Capítulo 13: Patrones de Diseño en Java

Compartir

Los patrones de diseño son soluciones probadas y comunes a problemas de diseño de software. Ayudan a escribir código más eficiente, mantenible y escalable. En este capítulo, exploraremos varios patrones de diseño en Java junto con ejemplos y ejercicios para reforzar la comprensión.

13.1 Patrón Singleton

El patrón Singleton garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a esa instancia. Es útil en situaciones donde una única instancia debe coordinar acciones en todo el sistema.

Ejemplo:

public class Singleton {
    private static Singleton instance;
    
    private Singleton() {
        // Constructor privado para evitar instancias múltiples
    }
    
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

Ejercicio: Implementa un Singleton para manejar la configuración de una aplicación y asegúrate de que solo haya una instancia en el sistema.

13.2 Patrón Factory Method

El patrón Factory Method define una interfaz para crear objetos, pero permite que las subclases alteren el tipo de objetos que se crearán. Es útil cuando una clase no puede anticipar la clase de objetos que debe crear.

Ejemplo:

interface Producto {
    void operacion();
}

class ProductoConcretoA implements Producto {
    public void operacion() {
        System.out.println("Operación en Producto A");
    }
}

class ProductoConcretoB implements Producto {
    public void operación() {
        System.out.println("Operación en Producto B");
    }
}

interface Fabrica {
    Producto crearProducto();
}

class FabricaConcretaA implements Fabrica {
    public Producto crearProducto() {
        return new ProductoConcretoA();
    }
}

class FabricaConcretaB implements Fabrica {
    public Producto crearProducto() {
        return new ProductoConcretoB();
    }
}

Ejercicio: Crea un conjunto de clases e interfaces que implementen el patrón Factory Method para crear diferentes tipos de vehículos.

13.3 Patrón Observer

El patrón Observer define una relación de uno a muchos entre objetos. Cuando el estado de un objeto cambia, todos los objetos que dependen de él son notificados y actualizados automáticamente. Este patrón se usa para implementar distribución de eventos.

Ejemplo:

import java.util.ArrayList;
import java.util.List;

interface Observador {
    void actualizar(String mensaje);
}

class Sujeto {
    private List<Observador> observadores = new ArrayList<>();

    public void registrarObservador(Observador observador) {
        observadores.add(observador);
    }

    public void eliminarObservador(Observador observador) {
        observadores.remove(observador);
    }

    public void notificarObservadores(String mensaje) {
        for (Observador observador : observadores) {
            observador.actualizar(mensaje);
        }
    }
}

Ejercicio: Crea un sistema de notificación que utiliza el patrón Observer. Los observadores pueden ser suscritos para recibir notificaciones cuando ocurren eventos específicos.

13.4 Patrón Strategy

El patrón Strategy define una familia de algoritmos, los encapsula y los hace intercambiables. Esto permite que el algoritmo varíe independientemente de los clientes que lo utilizan.

Ejemplo:

interface Estrategia {
    int realizarOperación(int a, int b);
}

class Suma implements Estrategia {
    public int realizarOperación(int a, int b) {
        return a + b;
    }
}

class Resta implements Estrategia {
    public int realizarOperación(int a, int b) {
        return a - b;
    }
}

class Calculadora {
    private Estrategia estrategia;

    public Calculadora(Estrategia estrategia) {
        this.estrategia = estrategia;
    }

    public int ejecutarOperación(int a, int b) {
        return estrategia.realizarOperación(a, b);
    }
}

Ejercicio: Crea un programa que utiliza el patrón Strategy para realizar diferentes tipos de cálculos matemáticos, como suma, resta, multiplicación y división.

Este capítulo te proporciona una base sólida para comprender y aplicar patrones de diseño en tus proyectos de desarrollo de software en Java. Estos patrones te ayudarán a escribir código más eficiente y mantenible. Practica la implementación de estos patrones para fortalecer tus habilidades de programación en Java.


Compartir

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *