# 装饰器模式
装饰器模式(Decorator Pattern
)允许向一个现有的对象添加新的功能, 同时又不改变其结构。
装饰器模式属于结构型模式。
# UML 类图
# 传统的 Java 类图
# JavaScript 类图
# 作用
动态地给一个对象添加一些额外的职责。
# 优缺点
# 优点
装饰器模式和继承的共同特点就是扩展对象的功能, 而装饰器模式比继承更加灵活。
装饰类和被装饰类可以独立发展,不会相互耦合。
# 缺点
- 多层装饰比较复杂。
# 场景
# 实现代码
/*
* @Author: Rainy
* @Date: 2019-11-14 19:25:01
* @LastEditors : Rainy
* @LastEditTime : 2020-01-06 10:56:04
*/
class Decorator {
circle: Circle;
constructor(circle: Circle) {
this.circle = circle;
}
draw(): void {
this.circle.draw();
}
setRedBorder(circle: Circle): void {
console.log('setRedBorder', this.circle);
}
}
class ShapeDecorator {
circleShape: CircleShape;
constructor(circleShape: CircleShape) {
this.circleShape = circleShape;
}
draw(): void {
console.log('ShapeDecorator Draw');
this.circleShape.draw();
}
}
class RectShape implements Rectangle {
draw(): void {
console.log('Draw Circle');
}
}
class CircleShape implements Circle {
draw(): void {
console.log('Draw Circle');
}
}
class Circle {
draw(): void {
console.log('Draw Circle');
}
}
class Rectangle {
draw(): void {
console.log('Draw Circle');
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59