Skip to main content

У чому суть патерна Decorator?

Decorator (Декоратор) - це структурний патерн, що дозволяє динамічно додавати об'єкту нову поведінку, не змінюючи його клас і не порушуючи принцип відкритості/закритості (OCP).


1. Суть ідеї

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


2. Коли використовувати

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

3. Приклад (Java)

java
interface DataSource { void write(String data); } class FileDataSource implements DataSource { public void write(String data) { System.out.println("Запис у файл: " + data); } } class EncryptionDecorator implements DataSource { private DataSource wrappee; public EncryptionDecorator(DataSource source) { this.wrappee = source; } public void write(String data) { data = encrypt(data); wrappee.write(data); } private String encrypt(String data) { return "Encrypted(" + data + ")"; } }

Використання:

java
DataSource source = new EncryptionDecorator(new FileDataSource()); source.write("Hello");

Результат: FileDataSource працює як раніше, але тепер дані шифруються перед записом.


4. Переваги

  • Поведінку можна додавати динамічно, без зміни вихідного класу.
  • Можна комбінувати кілька декораторів (логування + стиснення + шифрування).
  • Підтримує принцип композиції замість успадкування.

5. Підсумок

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

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

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

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