装饰器模式
- 装饰器模式,在不改变原对象的基础上,通过对其拓展功能和属性,来实现更复杂的逻辑
- 举个例子: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);