Kotlin模板方法模式如何處理模板方法的覆寫(xiě)

小樊
81
2024-11-02 15:10:29

在Kotlin中,模板方法模式可以通過(guò)定義一個(gè)抽象類(lèi)來(lái)實(shí)現(xiàn),這個(gè)抽象類(lèi)包含了一個(gè)抽象的子方法(即模板方法)和一組具體的子方法。具體的子方法可以在抽象類(lèi)中實(shí)現(xiàn),也可以在子類(lèi)中覆寫(xiě)。下面是一個(gè)簡(jiǎn)單的示例:

abstract class AbstractTemplate {
    // 模板方法
    fun templateMethod() {
        step1()
        step2()
        step3()
    }

    // 具體子方法1,可以在抽象類(lèi)中實(shí)現(xiàn),也可以被子類(lèi)覆寫(xiě)
    fun step1() {
        println("AbstractTemplate step1")
    }

    // 具體子方法2,可以在抽象類(lèi)中實(shí)現(xiàn),也可以被子類(lèi)覆寫(xiě)
    fun step2() {
        println("AbstractTemplate step2")
    }

    // 具體子方法3,可以在抽象類(lèi)中實(shí)現(xiàn),也可以被子類(lèi)覆寫(xiě)
    fun step3() {
        println("AbstractTemplate step3")
    }
}

class ConcreteTemplate : AbstractTemplate() {
    // 覆寫(xiě)具體子方法1
    override fun step1() {
        println("ConcreteTemplate step1")
    }

    // 覆寫(xiě)具體子方法2
    override fun step2() {
        println("ConcreteTemplate step2")
    }
}

fun main() {
    val template = ConcreteTemplate()
    template.templateMethod()
}

在這個(gè)示例中,AbstractTemplate是一個(gè)抽象類(lèi),它定義了一個(gè)模板方法templateMethod和三個(gè)具體子方法step1、step2step3。ConcreteTemplateAbstractTemplate的一個(gè)子類(lèi),它覆寫(xiě)了step1step2兩個(gè)具體子方法。

當(dāng)我們調(diào)用ConcreteTemplatetemplateMethod方法時(shí),它會(huì)按照模板方法的定義依次調(diào)用step1、step2step3。由于step1step2ConcreteTemplate中被覆寫(xiě),所以它們的輸出將是ConcreteTemplate中定義的版本。

0