Junior
O que é o padrão 'Adaptador' na programação?
sobes.tech IA
Resposta da IA
O padrão "Adaptador" converte a interface de uma classe para outra que o cliente espera. É útil quando precisa usar uma classe existente, mas sua interface não corresponde ao que é necessário. Uma classe de envoltório (adaptador) é criada, contendo uma instância da classe adaptável e implementando a interface requerida, delegando as chamadas aos métodos correspondentes do objeto adaptável.
Tipos de adaptadores:
- Adaptador de objeto: Usa composição. O adaptador contém uma referência ao objeto adaptável.
- Adaptador de classe: Usa herança múltipla. O adaptador herda tanto da interface requerida quanto da classe adaptável (menos comum em Python, pois herança múltipla pode ser complexa).
Exemplo de adaptador de objeto:
Suponha que temos uma classe OldSystem, que queremos usar, mas seu método se chama old_request, e espera-se um método new_request.
// old_system.py
class OldSystem:
def old_request(self):
print("Requisição do sistema antigo processada.")
// new_interface.py
class NewInterface:
def new_request(self):
pass # Método abstrato esperado pelo cliente
// adapter.py
from old_system import OldSystem
from new_interface import NewInterface
class Adapter(NewInterface):
def __init__(self, old_system):
self._old_system = old_system
def new_request(self):
// Delegar chamada ao método do sistema antigo
self._old_system.old_request()
// client.py
from old_system import OldSystem
from adapter import Adapter
def client_code(interface):
interface.new_request()
// Uso
old_system_instance = OldSystem()
adapter_instance = Adapter(old_system_instance)
client_code(adapter_instance)
Aplicado para integrar sistemas antigos com novos, ou para usar bibliotecas de terceiros com interfaces incompatíveis.
Vantagens:
- Permite que classes com interfaces incompatíveis trabalhem juntas.
- Melhora a reutilização de código.
- Separa a interface da implementação.
Desvantagens:
- Pode aumentar o número de classes no projeto.
- Adiciona um nível adicional de indireção.