Sobes.tech
Назад к вопросам
Senior
5

Чем GoF-паттерн Mediator отличается от Proxy?

Компании, где спрашивали
ИП Ганус Александр Андреевич

Ответ от нейросети

sobes.tech AI

Паттерн Mediator и Proxy решают разные задачи:

  • Mediator — центральный объект, который управляет взаимодействием между множеством объектов, снижая связанность между ними. Вместо того, чтобы объекты напрямую общались друг с другом, они взаимодействуют через медиатор.

  • Proxy — объект-заместитель, который контролирует доступ к другому объекту, например, для ленивой инициализации, контроля доступа или кэширования.

Пример:

  • Mediator используется, когда нужно координировать сложное взаимодействие между компонентами.
  • Proxy используется, когда нужно контролировать доступ к ресурсоёмкому объекту.
// Mediator пример
interface Mediator {
    void notify(Component sender, String event);
}

class ConcreteMediator implements Mediator {
    private Component1 c1;
    private Component2 c2;

    public void setComponent1(Component1 c1) { this.c1 = c1; }
    public void setComponent2(Component2 c2) { this.c2 = c2; }

    public void notify(Component sender, String event) {
        if (sender == c1 && event.equals("A")) {
            c2.doC();
        }
    }
}

// Proxy пример
interface Image {
    void display();
}

class RealImage implements Image {
    private String filename;
    public RealImage(String filename) { this.filename = filename; loadFromDisk(); }
    private void loadFromDisk() { /* загрузка файла */ }
    public void display() { /* отображение изображения */ }
}

class ProxyImage implements Image {
    private RealImage realImage;
    private String filename;
    public ProxyImage(String filename) { this.filename = filename; }
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(filename);
        }
        realImage.display();
    }
}