装饰器模式
- 装饰器模式,在不改变原对象的基础上,通过对其拓展功能和属性,来实现更复杂的逻辑
- 举个例子:4s店在卖一种车,价格为10万元。如果用户需要在此基础上,加装一些配置的话,就要加钱。比如加热座椅配置需要2万,电动后视镜需要0.8万,等等。
//一般写法——非装饰器模式function Car(){ this.price = 10;}Car.prototype = { addHeatSeat: function(){ // this.hasHeatSeat = true; this.price += 2; }, addAutoMirror: function(){ // this.hasAutoMirror = true; this.price += 0.8; }}var car1 = new Car();console.log(car1);car1.addAutoMirror();car1.addHeatSeat();console.log(car1);
// 装饰器模式// 好处:减少了对构造函数的修改function Car(){ this.price = 10;}function carWithHeatSeat(carClass){ carClass.hasHeatSeat = true; carClass.price += 2;}function carWithAutoMirror(carClass){ carClass.hasAutoMirror = true; carClass.price += 0.8;}var car2 = new Car();console.log(car2);carWithHeatSeat(car2);carWithAutoMirror(car2);console.log(car2);