装饰者模式
定义
在不改变元对象的基础上,通过对其进行包装拓展(添加属性方法)
实现方法
构造函数需要一个装饰资源池,提供相应的装饰方法,提供添加装饰方法的方法
实现
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()