Чим «Proxy» відрізняється від «Декоратора»?
Proxy (Заступник) і Decorator (Декоратор) зовні схожі - обидва "обгортають" об'єкт і реалізують той самий інтерфейс. Але їхні цілі та смислові задачі різні.
1. Мета
- Proxy - контролює доступ до об'єкта. → вирішує коли, як і чи можна викликати справжній об'єкт.
- Decorator - розширює поведінку об'єкта. → додає нову функціональність поверх наявної.
2. Контекст використання
| Ситуація | Proxy | Decorator |
|---|---|---|
| Об'єкт важкий або віддалений | Ленива загрузка, кеш | Не призначений для цього |
| Потрібно додати нову поведінку (логування, шифрування) | Можливо, але не основне | Основна мета |
| Контроль доступу / безпека | Так | Ні |
| Клієнт повинен думати, що працює зі "справжнім об'єктом" | Обов'язково | Не завжди |
3. Приклад відмінності
Proxy (контроль доступу):
java
class SecuredFileProxy implements FileAccess {
private RealFile realFile;
private String userRole;
public void read() {
if (userRole.equals("admin")) realFile.read();
else System.out.println("Доступ заборонено");
}
}Decorator (розширення поведінки):
java
class LoggingFileDecorator implements FileAccess {
private FileAccess wrappee;
public void read() {
System.out.println("Читання файлу...");
wrappee.read();
}
}4. Прозорість
- Proxy прагне бути непомітним: клієнт не повинен знати, що працює з посередником.
- Decorator - усвідомлена обгортка: клієнт знає, що додано нову поведінку.
5. Аналогія
- Proxy - як охоронець біля дверей, вирішує, кого впустити.
- Decorator - як дизайнер, прикрашає кімнату, не змінюючи її основу.
Висновок
| Критерій | Proxy | Decorator |
|---|---|---|
| Основна мета | Контроль доступу | Розширення поведінки |
| Прозорість для клієнта | Повна | Часткова |
| Тип поведінки | Керувальне | Додаткове |
| Приклад | Лінива загрузка, захист, кеш | Логування, шифрування, форматування |
Підсумок: Proxy захищає або керує, Decorator додає і прикрашає.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.