在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
、step2
和step3
。ConcreteTemplate
是AbstractTemplate
的一個(gè)子類(lèi),它覆寫(xiě)了step1
和step2
兩個(gè)具體子方法。
當(dāng)我們調(diào)用ConcreteTemplate
的templateMethod
方法時(shí),它會(huì)按照模板方法的定義依次調(diào)用step1
、step2
和step3
。由于step1
和step2
在ConcreteTemplate
中被覆寫(xiě),所以它們的輸出將是ConcreteTemplate
中定義的版本。