目录
1、什么是装饰器模式
当我们想要给一个类的方法添加新的功能时,我们一般会采取继承方式来实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。
如果我们想在不新增子类的情况下扩展类,就需要使用装饰器模式,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
2、实现方式
装饰器模式分为三步
- Component 类充当抽象角色
- 为 Component 提供一个基本的实现类
- 修饰类引用并继承 Component 类,重写父类方式实现增强
例如,我要为 Component::doSomething
新增一个耗时计算的功能,实现代码如下:
interface Component {
fun doSomething()
}
class ComponentImpl : Component {
override fun doSomething() {
println("doSomething")
}
}
// 修饰类
class ComponentWrapper : Component {
var component: Component? = null
override fun doSomething() {
val start = System.currentTimeMillis()
component?.doSomething()
val end = System.currentTimeMillis()
println("执行耗时:${end - start}")
}
}
// 测试代码
fun main() {
val component = ComponentWrapper().apply {
this.component = ComponentImpl()
}
component.doSomething()
}
// 执行效果
doSomething
执行耗时:1