设计模式6 - 装饰者模式

77 阅读1分钟

装饰者模式

定义

在不改变元对象的基础上,通过对其进行包装拓展(添加属性方法)

实现方法

构造函数需要一个装饰资源池,提供相应的装饰方法,提供添加装饰方法的方法

实现

    function PlaneFactory () {
      this.decorate_list = []
    }

    // 集合所有的装饰方法
    PlaneFactory.prototype.decorators = {
      eatOneLife (obj) {
        obj.blood += 100
      },
      eatTwoLife (obj) {
        obj.blood += 200
      }
    }
    // 搜集对对象的装饰 
    PlaneFactory.prototype.decorate = function (decorators) {
      if(!this.decorate_list.includes(decorators)) {
        this.decorate_list.push(decorators)
      }
    }
    // 更新装饰
    PlaneFactory.prototype.update = function () {
      for(let i = 0; i < this.decorate_list.length; i ++) {
        this.decorators[this.decorate_list[i]] && this.decorators[this.decorate_list[i]](this)
      }
    }
    PlaneFactory.prototype.emyty = function () {
      this.decorate_list = []
    }
    
    // 使用
    oSp.decorate('eatOnLife')
    oSP.update()