javascript设计模式之Decorator(装饰者)模式

Decorator是一种结构型设计模式,用于促进代码复用,是一种可行的对象子类化的替代方案。Decorator提供了将行为动态添加到系统现有类的能力。其想法是,装饰者本身对于类原有的基本功能来说并不是必要的;否则,它就可以合并到超类本身。

装饰者可以用于修改现有的系统,希望在系统中为对象添加额外的功能,而不需要大量修改使用它们的底层代码。开发人员使用装饰者的一个原因是,应用程序可能包含需要大量不同类型对象的功能。

Decorator模式并不严重依赖于创建对象的方式,而是关注扩展其额外功能。我们使用了一个单一的基本对象并逐步添加提供额外功能的Decorator对象,而不是仅仅依赖于原型继承。这个想法是:向基本对象添加属性或者方法,而不是进行子类化 ,因此它较为精简。

在JavaScript中向对象添加新属性是一个非常简单的过程:

  function Vehicle(vehicleType){
        this.vehicleType = vehicleType || "car";
        this.model="default";
    }

    var truck = new Vehicle("truck");
    //给truck装饰新功能
    truck.setModel = function (modelName){
        this.model = modelName;
    }


使用多个装饰者装饰对象:


  function MacBook(){
      this.cost = function(){
          return 997;
      }
      this.screenSize = function(){
          return 13;
      }
  }
    //Decorator 1
    function Memory(macbook){
        var v = macbook.cost();
        macbook.cost = function (){
            return v + 75;
        }
    }
    //Decorator 2
    function Engraving (macbook) {
        var v = macbook.cost();
        macbook.cost = function(){
            return v + 200;
        }
    }
    var mb = new MacBook();
    Memory(mb);
    Engraving(mb);
    

装饰行为并没有重写原始MacBook对象的构造函数方法,原来的MacBook依然保持不变并完好无损。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值