Web/JavaScript
[Design Pattern] 6. Decorator Pattern
태애니
2023. 11. 16. 17:26
728x90
런타임 시에 객체에 동적으로 부가기능을 추가하는 패턴
let sale = new Sale(100);
sale = sale.decorate('fedtax');
sale = sale.decorate('quebec');
sale = sale.decorate('money');
sale.getPrice();
function Sale(price) {
this.price = price || 100;
}
Sale.prototype.getPrice = function() {
return this.price;
}
//Sale.decorators = {};
Sale.prototype.decorate = function(decorators) {
var F = function() {},
overrides = this.constructor.decorators[decorator],
i, newobj;
F.prototype = this;
newobj = new F();
newobj.uber = F.prototype;
for (i in overrides) {
if (overrides.hasOwnProperty(i)) {
newobj[i] = overrides[i];
}
}
return newobj;
};
Sale.decorators.fedtax = {
getPrice: function() {
let price = this.uber.getPrice(); // uber 는 상속된 객체
price += price * 5 / 100; // 5% 세율 추가
return price;
}
};
Sale.decorators.money = {
getPrice: function() {
return '$' + this.uber.getPrice().toFixed(2);
}
}
728x90