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
Utilisation
legacy = LegacyAudioSystem()
player = LegacyAudioAdapter(legacy)
player.play_audio("music.mp3")