Sobes.tech
Back to questions
Junior — Middle
62

Объясните различия между паттернами адаптер, декоратор и прокси, их назначения и области применения.

Companies where asked
IT OneIT One

Answer from AI

sobes.tech AI

Паттерны адаптер, декоратор и прокси решают разные задачи, хотя все они работают с объектами и интерфейсами.

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

  • Декоратор (Decorator) — динамически добавляет объектам новые обязанности, оборачивая их без изменения исходного класса. Позволяет расширять функциональность гибко.

  • Прокси (Proxy) — предоставляет суррогат или заместителя для другого объекта, контролируя доступ к нему. Часто используется для ленивой инициализации, контроля доступа или логирования.

Пример:

// Адаптер
interface Target {
    void request();
}
class Adaptee {
    void specificRequest() { /*...*/ }
}
class Adapter implements Target {
    private Adaptee adaptee = new Adaptee();
    public void request() {
        adaptee.specificRequest();
    }
}

// Декоратор
interface Component {
    void operation();
}
class ConcreteComponent implements Component {
    public void operation() { /* базовая реализация */ }
}
class Decorator implements Component {
    protected Component component;
    public Decorator(Component c) { this.component = c; }
    public void operation() {
        component.operation();
        // дополнительное поведение
    }
}

// Прокси
class Proxy implements Subject {
    private RealSubject realSubject;
    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.request();
    }
}

Таким образом, адаптер меняет интерфейс, декоратор расширяет поведение, а прокси контролирует доступ к объекту.