模板模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。以下是使用Kotlin实现模板模式的示例:
- 定义抽象类(模板类):包含一个模板方法,该方法定义了算法的骨架,同时包含一些抽象方法和具体方法。抽象方法由子类实现,具体方法可以在模板类中提供默认实现。
- 创建具体子类:继承抽象类,实现抽象类中的抽象方法。
示例代码如下:
// 抽象模板类
abstract class AbstractTemplate {
// 模板方法,定义算法骨架
final fun templateMethod() {
step1()
step2()
step3()
}
// 抽象方法,由子类实现
protected abstract fun step1()
// 具体方法,提供默认实现
protected fun step2() {
println("This is step 2 with default implementation")
}
// 抽象方法,由子类实现
protected abstract fun step3()
}
// 具体子类A
class ConcreteTemplateA : AbstractTemplate() {
override fun step1() {
println("ConcreteTemplateA: Step 1 implementation")
}
override fun step3() {
println("ConcreteTemplateA: Step 3 implementation")
}
}
// 具体子类B
class ConcreteTemplateB : AbstractTemplate() {
override fun step1() {
println("ConcreteTemplateB: Step 1 implementation")
}
override fun step3() {
println("ConcreteTemplateB: Step 3 implementation")
}
}
使用示例:
fun main() {
val templateA = ConcreteTemplateA()
templateA.templateMethod()
val templateB = ConcreteTemplateB()
templateB.templateMethod()
}
在上述代码中:
- AbstractTemplate 是抽象模板类,其中 templateMethod 是模板方法,它定义了算法的执行顺序,依次调用 step1、step2 和 step3。step1 和 step3 是抽象方法,需要子类去实现,step2 是具体方法,提供了默认实现。
- ConcreteTemplateA 和 ConcreteTemplateB 是具体子类,它们继承自 AbstractTemplate,并实现了抽象方法 step1 和 step3。
- 在 main 函数中,分别创建了 ConcreteTemplateA 和 ConcreteTemplateB 的实例,并调用 templateMethod 方法,展示了不同子类根据自身实现执行算法的过程。
通过这种方式,实现了模板模式,使得算法的结构得以固定,而具体的实现细节可以由子类灵活定制。
当前文章价值3.5元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

评论已关闭!