装饰器模式

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