Aller au contenu principal

Adapter (ou Adaptateur en français)

Le design pattern Adapter (ou Adaptateur en français) est un patron de conception structurel. Il sert à faire en sorte que deux interfaces incompatibles puissent fonctionner ensemble, sans modifier leur code.

Principe

L'adaptateur agit comme un pont entre :

  • une interface cible (celle que ton code connaît),
  • et une classe existante (avec une interface différente).

L'adaptateur traduit les appels entre les deux.

Exemple simple

Le code que l'on utilise travaille avec une méthode play_audio(file). Je veux intégrer une ancienne classe qui n'a comme méthode que play(file_path).

Mon système attend :

class AudioPlayer:
def play_audio(self, file: str):
print(f"Playing audio file: {file}")

Cette classe est incompatible avec :

class LegacyAudioSystem:
def play(self, file_path: str):
print(f"Playing (legacy) file from path: {file_path}")

Code

On met donc en place un Adaptateur qui permet d'utiliser notre ancienne classe comme si on utilisé la nouvelle :

class LegacyAudioAdapter(AudioPlayer):
def __init__(self, legacy_system: LegacyAudioSystem):
self.legacy_system = legacy_system

def play_audio(self, file: str):
# Adaptation de l'appel
self.legacy_system.play(file)

Diagramme UML

adapterexample

Utilisation

legacy = LegacyAudioSystem()
player = LegacyAudioAdapter(legacy)

player.play_audio("music.mp3")