Sobes.tech
Back to questions
Junior — Middle
63

Можете объяснить основные отличия между шаблонами Adapter, Facade и Proxy и в каких ситуациях их лучше использовать?

Companies where asked
Prooftech

Answer from AI

sobes.tech AI

Основные отличия между шаблонами Adapter, Facade и Proxy:

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

    • Используется, когда нужно интегрировать существующий класс с новым интерфейсом.
  • Facade (Фасад): Предоставляет упрощённый интерфейс к сложной подсистеме, скрывая её внутреннюю сложность.

    • Используется для упрощения взаимодействия с большим количеством классов.
  • Proxy (Заместитель): Контролирует доступ к другому объекту, может добавлять дополнительную логику (например, ленивую инициализацию, кэширование, безопасность).

    • Используется, когда нужно управлять доступом или добавлять поведение без изменения оригинального объекта.

Пример ситуаций:

  • Adapter: интеграция старого API с новым интерфейсом.
  • Facade: предоставление простого API для сложной библиотеки.
  • Proxy: реализация отложенной загрузки ресурса или контроль доступа.

Пример Adapter на Java:

interface Target {
    void request();
}

class Adaptee {
    void specificRequest() { System.out.println("Специфический запрос"); }
}

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