Sobes.tech
Junior — Middle

Pouvez-vous expliquer les différences entre les modèles Adapter et Decorator dans le contexte de la conception logicielle?

sobes.tech IA

Réponse de l'IA

Les patrons Adapter et Decorator sont souvent confondus, mais ils ont des objectifs et des méthodes d'application différents :

  • Adapter (Adaptateur) — sert à transformer l'interface d'une classe en l'interface attendue par le client. Il est utilisé lorsque vous devez faire fonctionner ensemble des interfaces incompatibles. L'adaptateur enveloppe l'objet et traduit les appels du client en appels à l'objet adapté.

  • Decorator (Décorateur) — est conçu pour ajouter dynamiquement de nouvelles responsabilités à un objet sans changer son interface. Le décorateur enveloppe l'objet et étend ou modifie son comportement.

Différences clés :

  • L'Adapter modifie l'interface de l'objet pour qu'elle soit compatible avec le client.
  • Le Decorator conserve l'interface de l'objet, mais ajoute un nouveau comportement.

Exemple en Java :

// Adapter : adaptation de l'interface
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Requête spécifique");
    }
}

class Adapter implements Target {
    private Adaptee adaptee;
    Adapter(Adaptee a) { this.adaptee = a; }
    public void request() {
        adaptee.specificRequest();
    }
}

// Decorator : ajout de comportement
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Opération principale");
    }
}

class Decorator implements Component {
    protected Component component;
    Decorator(Component c) { this.component = c; }
    public void operation() {
        component.operation();
    }
}

class ConcreteDecorator extends Decorator {
    ConcreteDecorator(Component c) { super(c); }
    public void operation() {
        super.operation();
        System.out.println("Comportement supplémentaire");
    }
}