Sobes.tech
Junior — Middle

Можете ли да обясните разликите между моделите Adapter и Decorator в контекста на проектирането на софтуер?

sobes.tech AI

Отговор от AI

Шаблоните Adapter и Decorator често се бъркат, но имат различни цели и начини на приложение:

  • Adapter (Адаптер) — служи за преобразуване на интерфейса на един клас в интерфейса, който очаква клиентът. Използва се, когато трябва да накарате несъвместими интерфейси да работят заедно. Адаптерът обвива обекта и превежда извикванията на клиента към извиквания към адаптирания обект.

  • Decorator (Декоратор) — предназначен е за динамично добавяне на нови отговорности към обект без да променя неговия интерфейс. Декораторът обвива обекта и разширява или променя неговото поведение.

Ключови разлики:

  • Adapter променя интерфейса на обекта, за да е съвместим с клиента.
  • Decorator запазва интерфейса на обекта, но добавя ново поведение.

Пример на Java:

// Adapter: адаптиране на интерфейса
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Специфичен заявка");
    }
}

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

// Decorator: добавяне на поведение
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Основна операция");
    }
}

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("Допълнително поведение");
    }
}