Skip to main content

Чим «Proxy» відрізняється від «Декоратора»?

Proxy (Заступник) і Decorator (Декоратор) зовні схожі - обидва "обгортають" об'єкт і реалізують той самий інтерфейс. Але їхні цілі та смислові задачі різні.


1. Мета

  • Proxy - контролює доступ до об'єкта. → вирішує коли, як і чи можна викликати справжній об'єкт.
  • Decorator - розширює поведінку об'єкта. → додає нову функціональність поверх наявної.

2. Контекст використання

СитуаціяProxyDecorator
Об'єкт важкий або віддаленийЛенива загрузка, кешНе призначений для цього
Потрібно додати нову поведінку (логування, шифрування)Можливо, але не основнеОсновна мета
Контроль доступу / безпекаТакНі
Клієнт повинен думати, що працює зі "справжнім об'єктом"Обов'язковоНе завжди

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 - як дизайнер, прикрашає кімнату, не змінюючи її основу.

Висновок

КритерійProxyDecorator
Основна метаКонтроль доступуРозширення поведінки
Прозорість для клієнтаПовнаЧасткова
Тип поведінкиКерувальнеДодаткове
ПрикладЛінива загрузка, захист, кешЛогування, шифрування, форматування

Підсумок: Proxy захищає або керує, Decorator додає і прикрашає.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.