装饰者模式的主要功能就是动态的将责任附加到对象上,而由于javascript的动态特性,为javascript函数添加新的职责将变得非常容易
一、概念
装饰者提供比继承更有弹性的替代方案。 装饰者用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。
装饰者通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。
二、实例
1 function Beverage() 2 { 3 this.description="Unknown Beverage"; 4 this.cost=function() 5 { 6 return 0; 7 } 8 } 9 10 //饮料 11 function Expresso(beverage) 12 { 13 this.description="Expresso"; 14 this.cost=function() 15 { 16 return 1+beverage.cost(); 17 } 18 } 19 20 //饮料 21 function HouseBlend(beverage) 22 { 23 this.description="HouseBlend"; 24 this.cost=function() 25 { 26 return 8+beverage.cost(); 27 } 28 } 29 //调料 30 function Mocha(beverage) 31 { 32 this.description="Mocha"; 33 this.cost=function() 34 { 35 return 2+beverage.cost(); 36 } 37 38 } 39 var mybeverage=new Mocha(new HouseBlend(new Beverage())); 40 console.log("共花了¥",mybeverage.cost());
由代码可知函数可通过递归不断的给对象beberage添加行为,个人以为装饰者模式在javascript中比较少用,毕竟给对象动态地添加行为本来就是javascript的强项,但是递归的思想却值得我们去深究。