(also known as Wrapper, an alternative naming shared with the Adapter pattern) is a design pattern that allows behavior to be added to an individual object, either statically or dynamically, without affecting the behavior of other objects from the same class.
Modifying object functionality
var Product = function (name, brand, price) {
this.name = name;
this.brand = brand;
this.price = price;
}
Base Object
var ReturnedProduct = function (product, deliveryCost) {
this.product = product;
this.name = product.name;
this.brand = product.brand;
this.price = product.price;
this.deliveryCost = deliveryCost;
}
Decorator Object
Decorator Object Wrapping
Instance-creating with Base Class
var product = new Product ('shoes', 'adidas', 55, 5);
Instance-creating with Decorator Class
var decoratedProduct = new ReturnedProduct (product, 22);
A decorator example
var ReturnedProduct = function (product, deliveryCost) {
this.product = product;
this.name = product.name;
this.brand = product.brand;
this.price = product.price;
this.deliveryCost = deliveryCost;
}
var product = new Product ('shoes', 'adidas', 55, 5);
var decoratedProduct = new ReturnedProduct (product, 22);
Name of decorated product is
this.name = 'Shoes'
Brand of decorated product is
this.brand = 'Adidas'
Our new decorated object is initialized with
this.product = product
Price of decorated product is
this.price = 55
Delivery Cost of decorated product is
this.deliveryCost = 22