Sobes.tech
Junior — Middle

Môžete vysvetliť rozdiely medzi vzormi Adapter a Decorator v kontexte návrhu softvéru?

sobes.tech AI

Odpoveď od AI

Vzorce Adapter a Decorator sa často zamieňajú, ale majú odlišné ciele a spôsoby použitia:

  • Adapter (Prispôsobovač) — slúži na transformáciu rozhrania jednej triedy na rozhranie, ktoré očakáva klient. Používa sa, keď je potrebné, aby nesúrodé rozhrania spolupracovali. Adaptér obalí objekt a prekladá volania klienta na volania upraveného objektu.

  • Decorator (Dekorátor) — je určený na dynamické pridávanie nových zodpovedností objektu bez zmeny jeho rozhrania. Dekorátor obalí objekt a rozširuje alebo mení jeho správanie.

Kľúčové rozdiely:

  • Adaptér mení rozhranie objektu, aby bol kompatibilný s klientom.
  • Dekorátor zachováva rozhranie objektu, ale pridáva nové správanie.

Príklad v Jave:

// Adaptér: prispôsobenie rozhrania
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Špecifická požiadavka");
    }
}

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

// Dekorátor: pridanie správania
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Hlavná operácia");
    }
}

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("Dodatočné správanie");
    }
}