概念
定义算法骨架、代码模版
角色介绍
- Abstract Class
- Concrete Class
UML

代码实现
abstract class Game {
    protected abstract fun initialize()
    protected abstract fun startPlay()
    protected abstract fun endPlay()
    // 模版
    fun play(){
        initialize()
        startPlay()
        endPlay()
    }
}
/**
 * 板球游戏
 */
class Cricket : Game() {
    override fun initialize() {
        println("Cricket initialize")
    }
    override fun startPlay() {
        println("Cricket startPlay")
    }
    override fun endPlay() {
        println("Cricket endPlay")
    }
}
/**
 * 足球游戏
 */
class Football : Game() {
    override fun initialize() {
        println("Football initialize")
    }
    override fun startPlay() {
        println("Football startPlay")
    }
    override fun endPlay() {
        println("Football endPlay")
    }
}
fun main() {
    var game:Game = Cricket()
    game.play()
    game = Football()
    game.play()
}
优缺点
优点
- 代码复用
- 统一代码框架
- 封装不变,扩展可变
缺点
- 增加复杂性
- 父类(基类)改动影响大
应用场景
一次性实现算法的不变部分,集中公共行避免代码重复。
- 数据库访问,Spring持久层处理的步骤:获取会话-》开始事务-》提交到数据库-》提交事务-》关闭会话
- GUI设计,BaseMVP BaseMVVM封装
- 框架和库
总结
该模式可以很好的分离代码流程通用部分和具体实现部分,从而提高代码灵活性和可维护性。











![[pyqt5]右键窗口弹出菜单并触发菜单点击事件](https://img-blog.csdnimg.cn/3a8e95dd65d349c5955ed1c28a121ec9.jpeg)







