본문 바로가기

Web/JavaScript

[Design Pattern] 6. Decorator Pattern

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