Что такое паттерн Декоратор и как он используется?
Паттерн Декоратор (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>
Как это работает
Заключение
Паттерн Декоратор - это мощный инструмент в арсенале разработчиков, который помогает поддерживать архитектуру вашего приложения гибкой и управляемой. Благодаря этому паттерну вы можете легко добавлять функциональность и изменять поведение объектов на лету без лишнего усложнения вашего кода.