装饰器模式

2021/6/5 10:22:48

本文主要是介绍装饰器模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 1、什么是装饰器模式
  • 2、实现方式

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


这篇关于装饰器模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程