装饰器模式

目录

1、什么是装饰器模式

当我们想要给一个类的方法添加新的功能时,我们一般会采取继承方式来实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

如果我们想在不新增子类的情况下扩展类,就需要使用装饰器模式,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

2、实现方式

装饰器模式分为三步

  1. Component 类充当抽象角色
  2. 为 Component 提供一个基本的实现类
  3. 修饰类引用并继承 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
上一篇:防抖节流


下一篇:自写图片遮罩层放大功能jquery插件源码,photobox.js 1.0版,不兼容IE6