Sobes.tech
Middle+

¿Qué son los patrones de diseño estructurales?

sobes.tech AI

Respuesta de la IA

Los patrones estructurales de diseño describen cómo las clases y objetos pueden combinarse para construir estructuras más grandes. Ayudan a organizar la interacción entre objetos, haciendo que el sistema sea más flexible y fácil de mantener.

Algunos patrones estructurales comunes:

  • Adaptador (Adapter): Permite que clases con interfaces incompatibles trabajen juntas.
  • Puente (Bridge): Separa la abstracción de su implementación, permitiendo que ambas cambien de manera independiente.
  • Compuesto (Composite): Permite tratar un grupo de objetos como si fuera un solo objeto.
  • Decorador (Decorator): Añade dinámicamente nuevo comportamiento a los objetos sin modificar su código.
  • Fachada (Facade): Proporciona una interfaz unificada a un conjunto de interfaces en un subsistema.
  • Flyweight (Flyweight): Ahorra memoria compartiendo estado común entre muchos objetos pequeños.
  • Proxy (Proxy): Proporciona un sustituto para otro objeto para controlar el acceso a él.

Ejemplo de uso del patrón Decorador:

# Componente base
class Coffee:
    def cost(self):
        return 5

    def description(self):
        return "Café normal"

# Decorador base
class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

    def cost(self):
        return self._coffee.cost()

    def description(self):
        return self._coffee.description()

# Decorador concreto
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

    def description(self):
        return self._coffee.description() + ", con leche"

# Uso
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Café normal - 5

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Café normal, con leche - 7

Estos patrones proporcionan flexibilidad mediante el uso de composición de objetos en lugar de herencia, lo que permite realizar cambios en el sistema sin modificar el código existente.