Що спільного у «Декоратора» і «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. Різниця в акценті
| Критерій | Decorator | Wrapper |
|---|---|---|
| Мета | Розширити функціональність | Ізолювати, спростити або приховати деталі |
| Використовується в | Шаблонах проєктування | Загальному програмуванні |
| Семантика | «Додати поведінку» | «Обгортати для контролю доступу, адаптації або захисту» |
4. Приклад відмінності
- Decorator: додає логування, шифрування, кешування.
- Wrapper: приховує складність API або формат даних (наприклад,
HttpResponseWrapper).
Висновок: Декоратор - це окремий випадок обгортки, спеціалізований на додаванні нової поведінки, тоді як wrapper - більш загальний термін для будь-якого прошарку, що перехоплює і делегує виклики базовому об'єкту.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.