Sobes.tech
Junior — Middle

Meg tudná magyarázni az Adapter és Decorator minták közötti különbségeket a szoftvertervezés kontextusában?

sobes.tech MI

Válasz az MI-től

Az Adapter és Decorator minták gyakran összetévesztik egymással, de különböző célokat és alkalmazási módokat szolgálnak:

  • Adapter (Adapter) — arra szolgál, hogy egy osztály interfészét a kliens által elvárt interfésszé alakítsa. Akkor használják, amikor inkompatibilis interfészeket kell együttműködtetni. Az adapter becsomagolja az objektumot, és a kliens hívásait az adaptált objektum hívásaira fordítja.

  • Decorator (Díszítő) — célja, hogy dinamikusan új felelősségeket adjon egy objektumnak anélkül, hogy megváltoztatná az interfészét. Az dekorátor becsomagolja az objektumot, és kibővíti vagy módosítja a viselkedését.

Fő különbségek:

  • Az Adapter megváltoztatja az objektum interfészét, hogy az kompatibilis legyen a klienssel.
  • A Decorator megőrzi az objektum interfészét, de új viselkedést ad hozzá.

Java példával:

// Adapter: interfész alkalmazása
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Specifikus kérés");
    }
}

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

// Decorator: viselkedés hozzáadása
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Fő művelet");
    }
}

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("Kiegészítő viselkedés");
    }
}