Sobes.tech
Middle+

O que são padrões de projeto estruturais?

sobes.tech IA

Resposta da IA

Os padrões de design estruturais descrevem como classes e objetos podem ser combinados para construir estruturas maiores. Eles ajudam a organizar a interação entre objetos, tornando o sistema mais flexível e fácil de manter.

Alguns padrões estruturais comuns:

  • Adaptador (Adapter): Permite que classes com interfaces incompatíveis trabalhem juntas.
  • Ponte (Bridge): Separa a abstração da sua implementação, permitindo que ambas mudem de forma independente.
  • Composto (Composite): Permite tratar um grupo de objetos como se fosse um único objeto.
  • Decorador (Decorator): Adiciona dinamicamente novo comportamento aos objetos sem modificar seu código.
  • Fachada (Facade): Fornece uma interface unificada a um conjunto de interfaces em um subsistema.
  • Flyweight (Flyweight): Economiza memória compartilhando estado comum entre muitos objetos pequenos.
  • Proxy (Proxy): Fornece um substituto para outro objeto para controlar o acesso a ele.

Exemplo de uso do padrão Decorador:

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

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

# 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() + ", com leite"

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

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Café comum, com leite - 7

Estes padrões proporcionam flexibilidade ao usar composição de objetos em vez de herança, permitindo fazer alterações no sistema sem modificar o código existente.