一、介绍
- 为对象添加新的功能
- 不改变其原有的结构和功能
二、事例
给手机加一个保护壳,保护手机,但是手机原有的功能不能覆盖,要都可以使用三、UML类图
四、代码演示
```javascript class Circle { draw () {
} } class Decorator { constructor(circle) {console.log('画一个圆')
} draw () {this.circle = circle
} setRedBorder(circle) {this.circle.draw() // 调用原有的方法
this.setRedBorder(circle)
} } // 测试代码 let circle = new Circle() circle.draw()console.log(`设置红色边框`)
let dec = new Decorator(circle) dec.draw()
<a name="XTxpv"></a>
# 五、使用场景
<a name="buj8l"></a>
## 1、es7的装饰器
```javascript
// @testDemo就是通过testDemo方法对Demo这个类进行装饰
// 这样调用Demo的时候,装饰器中的方法也能使用,而且不会污染Demo类
@testDemo
class Demo {
//
}
function testDemo (target) {
target.isShow = true
}
console.log(Demo.isShow)
// 传参的装饰器
function testDec(isDec) {
return function (target) {
target.isDec = isDec
}
}
@testDec(false)
class Demo () {
}
console.log(Demo.isDec)