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
'Web > JavaScript' 카테고리의 다른 글
[Design Pattern] 8.Builder Pattern (0) | 2023.11.18 |
---|---|
[Design Pattern] 7.Prototype Pattern (0) | 2023.11.17 |
[Design Pattern) 5.Command Pattern (0) | 2023.11.14 |
[Design Pattern] 4. Facade Pattern (0) | 2023.11.13 |
[Design Pattern] 3.Observer Pattern (0) | 2023.11.12 |