Поиск по сайту
Ctrl + K
Вопросы по JS

Что такое паттерн Декоратор и как он используется?

Паттерн Декоратор (Decorator) является структурным паттерном проектирования, который позволяет динамически добавлять объекты функциональность, оборачивая их в классы-декораторы. Это дает возможность модульно расширять поведение объектов, не изменяя их исходный код.

Зачем использовать паттерн Декоратор?

  • Расширяемость: Вы можете добавлять функциональность объектам без необходимости изменять их структуру.
  • Составные части: Позволяет комбинировать различные объекты с разными функциональностями.
  • Чистота кода: Уменьшает количество подклассов, делая код более чистым и управляемым.

Пример использования

Рассмотрим простой пример с текстовым редактором, где мы можем добавлять различные форматы (обычный текст, жирный текст и italic):

// Базовый класс сообщения
class Message {
  constructor(content) {
    this.content = content;
  }

  getContent() {
    return this.content;
  }
}

// Декоратор для жирного текста
class BoldDecorator {
  constructor(message) {
    this.message = message;
  }

  getContent() {
    return `<b>${this.message.getContent()}</b>`;
  }
}

// Декоратор для курсива
class ItalicDecorator {
  constructor(message) {
    this.message = message;
  }

  getContent() {
    return `<i>${this.message.getContent()}</i>`;
  }
}

// Использование паттерна Декоратор
const myMessage = new Message("Hello, World!");
console.log(myMessage.getContent()); // Hello, World!

const boldMessage = new BoldDecorator(myMessage);
console.log(boldMessage.getContent()); // <b>Hello, World!</b>

const italicBoldMessage = new ItalicDecorator(boldMessage);
console.log(italicBoldMessage.getContent()); // <i><b>Hello, World!</b></i>

Как это работает

  • Базовый класс – содержит оригинальное сообщение.
  • Декораторы – оборачивают базовый класс и добавляют новую функциональность (в данном случае изменение форматирования текста).
  • Композиция – вы можете комбинировать декораторы по желанию, позволяя гибко модифицировать поведение базового класса.
  • Заключение

    Паттерн Декоратор - это мощный инструмент в арсенале разработчиков, который помогает поддерживать архитектуру вашего приложения гибкой и управляемой. Благодаря этому паттерну вы можете легко добавлять функциональность и изменять поведение объектов на лету без лишнего усложнения вашего кода.