Назад к вопросам
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();
}
}