Sobes.tech
Junior — Middle

Kunt u het verschil uitleggen tussen de Patronen Adapter en Decorator in de context van softwareontwerp?

sobes.tech AI

Antwoord van AI

De Adapter- en Decorator-patronen worden vaak door elkaar gehaald, maar ze hebben verschillende doelen en toepassingswijzen:

  • Adapter (Adapter) — dient om de interface van een klasse te transformeren naar de interface die de klant verwacht. Wordt gebruikt wanneer incompatibele interfaces samen moeten werken. De adapter omhult het object en vertaalt de aanroepen van de klant naar de aanroepen van het aangepaste object.

  • Decorator (Decorator) — is bedoeld om dynamisch nieuwe verantwoordelijkheden aan een object toe te voegen zonder de interface te wijzigen. De decorator omhult het object en breidt het gedrag uit of wijzigt het.

Belangrijke verschillen:

  • Adapter wijzigt de interface van het object zodat het compatibel is met de klant.
  • Decorator behoudt de interface van het object, maar voegt nieuw gedrag toe.

Voorbeeld in Java:

// Adapter: interface aanpassen
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Specifiek verzoek");
    }
}

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

// Decorator: gedrag toevoegen
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Hoofdoperatie");
    }
}

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("Aanvullend gedrag");
    }
}