在Kotlin中,模板方法模式可以通过定义一个抽象类来实现,这个抽象类包含了一个抽象的子方法(即模板方法)和一组具体的子方法。具体的子方法可以在抽象类中实现,也可以在子类中覆写。下面是一个简单的示例:
abstract class AbstractTemplate {
// 模板方法
fun templateMethod() {
step1()
step2()
step3()
}
// 具体子方法1,可以在抽象类中实现,也可以被子类覆写
fun step1() {
println("AbstractTemplate step1")
}
// 具体子方法2,可以在抽象类中实现,也可以被子类覆写
fun step2() {
println("AbstractTemplate step2")
}
// 具体子方法3,可以在抽象类中实现,也可以被子类覆写
fun step3() {
println("AbstractTemplate step3")
}
}
class ConcreteTemplate : AbstractTemplate() {
// 覆写具体子方法1
override fun step1() {
println("ConcreteTemplate step1")
}
// 覆写具体子方法2
override fun step2() {
println("ConcreteTemplate step2")
}
}
fun main() {
val template = ConcreteTemplate()
template.templateMethod()
}
在这个示例中,AbstractTemplate
是一个抽象类,它定义了一个模板方法templateMethod
和三个具体子方法step1
、step2
和step3
。ConcreteTemplate
是AbstractTemplate
的一个子类,它覆写了step1
和step2
两个具体子方法。
当我们调用ConcreteTemplate
的templateMethod
方法时,它会按照模板方法的定义依次调用step1
、step2
和step3
。由于step1
和step2
在ConcreteTemplate
中被覆写,所以它们的输出将是ConcreteTemplate
中定义的版本。