Le bon service, la mauvaise forme
Le comportement existe déjà. Seule sa forme ne correspond pas au contrat attendu par le client.
LegacyPrinter sait imprimer, mais expose printText. Le reste de l'application attend Printer#print. Modifier tous les clients ou casser la classe existante créerait une migration risquée.
Le signal à reconnaître
Le traducteur au milieu
Le client parle à Target
ReceiptServicedépend de l'interface attenduePrinter.Adaptateur traduit
PrinterAdapterimplémentePrinteret transforme l'appelprintenprintText.Adaptee fait le vrai travail
L'objetLegacyPrinterreste inchangé et imprime réellement le texte.
| Rôle | Exemple | Ce qu'il connaît |
|---|---|---|
| Target | Printer | Le contrat voulu par l'application. |
| Adaptateur | PrinterAdapter | Target et l'objet existant. |
| Adaptee | LegacyPrinter | Son ancienne API seulement. |
| Client | ReceiptService | Target seulement. |
Renommer, transformer, restructurer
Traduire ne signifie pas seulement renommer une méthode. La forme des données ou d'une structure peut aussi changer.
| Variante | Décalage | Action de l'adaptateur |
|---|---|---|
| Renommer | print contre printText | Déléguer sous le nom attendu. |
| Transformer | Deux champs contre un nom complet | Construire le modèle attendu. |
| Restructurer | Nœuds internes contre nœuds affichables | Convertir récursivement la forme. |
Transformer un modèle
Restructurer un arbre
Le cas de base null est traité avant de construire le nœud cible. Les deux positions gauche et droite restent distinctes, même lorsqu'un enfant manque.
Garder l'adaptateur mince
Bon cas
- • Renommer une opération.
- • Réordonner ou convertir quelques paramètres.
- • Faire entrer un modèle externe dans le contrat interne.
Mauvais cas
- • Calculer une règle de facturation.
- • Décider le workflow métier.
- • Accumuler des conversions sans nettoyer l'architecture.
Quand ne pas l'utiliser
Le bénéfice est la réutilisation de l'existant. Le coût est un mapping supplémentaire, parfois avec une perte d'information qu'il faut rendre explicite.
Vérifiez vos réflexes
Vérifiez vos réflexes
Une réponse par question. La correction apparaît tout de suite.
Branchez une ancienne API
Traduisez une interface
Écrivez d'abord. Une IA externe pourra ensuite relire votre travail. Son retour peut être faux. Vérifiez-le avec la leçon.
Brouillon enregistré sur cet appareil.
Voir le prompt qui sera copié
Vous corrigez le travail d'un étudiant qui prépare une remédiation Java 17. Évaluez d'abord son raisonnement, ses invariants et la cohérence de son brouillon. Un code incomplet mais bien expliqué mérite un retour utile. Signalez précisément les erreurs sans inventer d'exigences hors sujet.
Cette leçon porte sur Adapter en Java. Vérifiez que VaultAdapter implémente Archive, possède l'objet OldVault et lui délègue sans réimplémenter le stockage. Les deux paramètres doivent être transmis dans l'ordre attendu par putFile. Le client doit rester typé avec Archive. Vérifiez les quatre rôles et refusez toute logique métier de rétention dans l'adaptateur. Le brouillon peut être incomplet, mais le sens de la traduction doit être exact.
Travail demandé:
Le client dépend de :
interface Archive {
void store(String name, byte[] content);
}
La classe existante ne doit pas être modifiée :
class OldVault {
void putFile(byte[] data, String fileName) { ... }
}
1. Écrivez VaultAdapter.
2. Il implémente Archive et reçoit OldVault au constructeur.
3. Il renomme l'appel et remet les paramètres dans le bon ordre.
4. Montrez un usage via une variable de type Archive.
5. Identifiez Target, Adapter, Adaptee et client.
6. Expliquez pourquoi une règle de rétention de 30 jours ne devrait pas vivre dans cet adaptateur.
Commencez par poser au plus deux questions si une intention reste ambiguë. Donnez ensuite les points corrects, les problèmes précis et la plus petite prochaine étape. Ne fournissez une solution complète que si l'étudiant la demande explicitement.
Réponse de l'étudiant:
[aucune réponse collée]