释义
装饰器模式,在原来的基础上再加一点点。
圆Circle
和抽象装饰器Decorator
都实现了图形Shape
接口。圆Circle
的draw()
只能画出圆,我们可以用红色装饰器RedDecorator
来为图形涂上红色:RedDecorator
的draw()
会在调用圆Shape
的draw()
的基础上再添加涂成红色的方法。
图形
1
2
3
|
interface Shape {
fun draw()
}
|
圆
1
2
3
4
5
|
class Circle {
override fun draw() {
drawCircle()
}
}
|
装饰器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
abstract class Decorator(val shape: Shape): Shape {
override fun draw() {
shape.draw()
}
}
class RedDecorator(shape: Shape): Shape(shape) { // Shape都可以
override fun draw() {
shape.draw() // 调用Shape的方法来画出图形
drawRed(shape) // 把图形“装饰”成红色
}
// 涂成红色
override fun drawRed() {
...
}
}
|
使用
1
2
3
4
5
6
|
fun main() {
val circle: Circle = Circle()
// 被涂成红色的圆形
val redCircle: Decorator = RedDecorator(circle)
redCircle.draw() // 会调用RedDecorator中的draw()
}
|