温馨提示×

Kotlin模板方法模式如何处理子类行为

小樊
84
2024-11-02 14:55:30
栏目: 编程语言

在Kotlin中,模板方法模式可以通过在抽象类中定义一个算法的骨架,并将一些步骤的实现延迟到子类来完成

  1. 定义一个抽象类,其中包含模板方法和一些抽象方法。这些抽象方法将在子类中实现。
abstract class AbstractTemplate {
    // 模板方法
    fun templateMethod() {
        step1()
        step2()
        step3()
    }

    // 抽象方法,子类必须实现
    abstract fun step1()

    // 抽象方法,子类必须实现
    abstract fun step2()

    // 具体方法,子类可以覆盖
    fun step3() {
        println("Step 3 implemented in AbstractTemplate")
    }
}
  1. 创建一个或多个子类,实现抽象类中的抽象方法。
class ConcreteTemplateA : AbstractTemplate() {
    override fun step1() {
        println("Step 1 implemented in ConcreteTemplateA")
    }

    override fun step2() {
        println("Step 2 implemented in ConcreteTemplateA")
    }
}

class ConcreteTemplateB : AbstractTemplate() {
    override fun step1() {
        println("Step 1 implemented in ConcreteTemplateB")
    }

    override fun step2() {
        println("Step 2 implemented in ConcreteTemplateB")
    }

    // 可以覆盖具体方法以改变行为
    override fun step3() {
        println("Step 3 implemented in ConcreteTemplateB")
    }
}
  1. 在客户端代码中,使用抽象类作为类型,并调用模板方法。这将导致子类根据其实现执行相应的步骤。
fun main() {
    val templateA = ConcreteTemplateA()
    templateA.templateMethod()

    val templateB = ConcreteTemplateB()
    templateB.templateMethod()
}

输出:

Step 1 implemented in ConcreteTemplateA
Step 2 implemented in ConcreteTemplateA
Step 3 implemented in AbstractTemplate
Step 1 implemented in ConcreteTemplateB
Step 2 implemented in ConcreteTemplateB
Step 3 implemented in ConcreteTemplateB

在这个例子中,AbstractTemplate 类定义了一个模板方法 templateMethod(),它包含了算法的骨架。step1()step2() 是抽象方法,子类必须实现它们。step3() 是一个具体方法,子类可以选择覆盖它以改变行为。客户端代码使用抽象类 AbstractTemplate 作为类型,并调用模板方法。这将导致子类根据其实现执行相应的步骤。

0