在 Kotlin 中,模板方法模式可以通過定義一個抽象類來實現(xiàn),這個抽象類包含了一個算法的骨架,以及一些抽象方法
// 定義一個抽象類 AbstractCalculator,其中包含了一個抽象方法 calculateResult
abstract class AbstractCalculator {
// 定義一個抽象方法 calculateResult,子類需要實現(xiàn)這個方法
abstract fun calculateResult(a: Int, b: Int): Int
// 定義一個模板方法 performCalculation,用于執(zhí)行整個計算過程
fun performCalculation(a: Int, b: Int) {
val intermediateResult = performIntermediateCalculation(a, b)
val result = calculateResult(intermediateResult, b)
println("Result: $result")
}
// 定義一個抽象方法 performIntermediateCalculation,用于執(zhí)行中間計算過程
// 這個方法可以在子類中重寫,以改變中間計算過程
abstract fun performIntermediateCalculation(a: Int, b: Int): Int
}
// 定義一個具體子類 IntegerCalculator,實現(xiàn)了 AbstractCalculator 中的抽象方法
class IntegerCalculator : AbstractCalculator() {
override fun calculateResult(a: Int, b: Int): Int {
return a + b
}
override fun performIntermediateCalculation(a: Int, b: Int): Int {
return a * b
}
}
fun main() {
val calculator = IntegerCalculator()
calculator.performCalculation(3, 4) // 輸出 "Result: 15"
}
在這個例子中,我們定義了一個抽象類 AbstractCalculator
,其中包含了一個抽象方法 calculateResult
和一個抽象方法 performIntermediateCalculation
。performCalculation
方法是模板方法,它負責(zé)執(zhí)行整個計算過程,包括調(diào)用抽象方法 performIntermediateCalculation
和 calculateResult
。
我們還定義了一個具體子類 IntegerCalculator
,實現(xiàn)了 AbstractCalculator
中的抽象方法。這樣,當(dāng)我們使用 IntegerCalculator
類時,它將按照模板方法 performCalculation
中定義的順序執(zhí)行計算過程。