Skip to main content

Що спільного у «Декоратора» і «Wrapper»?

Decorator і Wrapper (обгортка) - це майже одне й те саме за структурою: в обох випадках об'єкт обгортається іншим об'єктом, який перехоплює виклики і додає додаткову поведінку.


1. Спільна ідея

  • Обидва патерни використовують композицію: зберігають усередині посилання на "обгорнутий" об'єкт.
  • Обидва реалізують той самий інтерфейс, що й оригінал, щоб клієнт не помічав різниці.
  • Обидва делегують виклики оригінальному об'єкту, додаючи щось "поверх".

2. Приклад спільного підходу

java
class Wrapper implements Service { private Service wrappee; public Wrapper(Service s) { this.wrappee = s; } public void execute() { System.out.println("Before"); wrappee.execute(); System.out.println("After"); } }

Таку структуру можна назвати і декоратором, і обгорткою: різниця лише в меті.


3. Різниця в акценті

КритерійDecoratorWrapper
МетаРозширити функціональністьІзолювати, спростити або приховати деталі
Використовується вШаблонах проєктуванняЗагальному програмуванні
Семантика«Додати поведінку»«Обгортати для контролю доступу, адаптації або захисту»

4. Приклад відмінності

  • Decorator: додає логування, шифрування, кешування.
  • Wrapper: приховує складність API або формат даних (наприклад, HttpResponseWrapper).

Висновок: Декоратор - це окремий випадок обгортки, спеціалізований на додаванні нової поведінки, тоді як wrapper - більш загальний термін для будь-якого прошарку, що перехоплює і делегує виклики базовому об'єкту.

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

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

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