Dekorator jest jednym z popularniejszych wzorców projektowych, pozwala na dynamiczną zmianę zachowania aplikacji, rozszerza jej możliwości dekorując obiekty nowymi właściwościami.
Javascript to dynamiczny język, więc z łatwością możemy rozszerzać właściwości obiektów co czasem jest łatwiejsze niż pisanie wielu konstruktorów dla każdego potencjalnego przypadku. Zobaczmy przykład:
function User(name, addr) {
this.name = name;
this.addr = addr;
}
// dekorowanie instancji user
function decorateUserToEmployee(empl, data) {
empl.company = (data.company || "Default Ltd");
empl.salary = (data.salary || 5000);
empl.tasks = [];
empl.addTask = function(task) {
this.tasks.push(task);
}
return empl;
}
Przykład wykorzystania:
let user = new User("Adam", "Krk");
//dekorowanie użytkownika nowymi funkcjonalnościami
let employee=decorateUserToEmployee(user,{});
console.log(employee.name); // Adam
console.log(employee.company); // Default LTD
employee.addTask("zadanie 1");
KW