Kotlin~Template模版方法模式

news2024/9/28 3:28:08

概念

定义算法骨架、代码模版

角色介绍

  • 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封装
  • 框架和库

总结

该模式可以很好的分离代码流程通用部分和具体实现部分,从而提高代码灵活性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring面试题--Spring中事务失效的场景有哪些

Spring中事务失效的场景有哪些? 异常捕获处理 Transactional public void update(Integer from, Integer to, Double money) {try {//转账的用户不能为空Account fromAccount accountDao.selectById(from);//判断用户的钱是否够转账if (fromAccount.getMoney() - …

idea运行项目时右下角一直提示Lombok requires enabled annotation processing

出现这个错误是因为使用了Lombok插件的原因,可能是安装时候没有配置好 Lombok requires enabled annotation processing:翻译过来就是Lombok 需要启用注释处理 解决方案 File -> Settings ->Build,Execution,Deployment -> Compiler ->An…

35岁程序员现状,太真实!

“未来每年,我们将会为社会输送1000名工作10年以上的人才。” 这是之前马云在演讲中提到的关于阿里巴巴这样的大厂老员工的问题。总的来讲就是——“毕业”。 也经常能够看到在各个平台有程序员讲到自己35岁的焦虑。 之前,在某平台上就有一个有意思的…

Redis主从复制模式3

谋权篡位 假设在一个Redis集群中,有一台主机和两台从机构成一个Redis集群。此时因外部原因,导致主机宕机,俗话说 “国不可⼀一日无君,军不可一日无帅”,那么需要从剩余的两台从机中再次选出一台主机,从而来…

【小沐学Unity3d】Unity插件之绳索模拟Obi Rope

文章目录 1、简介2、安装3、示例测试3.1 Chains3.2 Crane3.3 ElectricalWires3.4 FreightLift3.5 Rocker3.6 RopeAndJoints3.7 RopeShowcase 4、简单测试结语 1、简介 https://assetstore.unity.com/packages/tools/physics/obi-rope-55579 Obi 是一款基于粒子的高级物理引擎…

本地部署 Chatbot UI,一个开源的 ChatGPT UI

openchat-ui 0. 什么是 Chatbot UI1. Github 地址2. 本地部署3. (参考)配置文件说明 0. 什么是 Chatbot UI Chatbot UI 是一个用于 AI 模型的开源聊天 UI。适用于 OpenChat 模型。 画面效果展示如下, 1. Github 地址 https://github.com/imoneoi/openchat-ui 2.…

Docker安装RabbitMQ docker安装RabbitMQ完整详细教程

Docker安装RabbitMQ docker安装RabbitMQ完整详细教程 Docker 上安装 RabbitMQ 3.12 的步骤:选择要安装的RabbitMQ 版本1、拉取 RabbitMQ 镜像2、创建并运行容器3、RabbitMQ 常用端口以及作用4、访问 管理页面测试,是否启动成功关闭容器启动容器 5、Docke…

OpenResty cosocket

cosocket 是各种 lua-resty-* 非阻塞库的基础 cosocket coroutine socket 需要 Lua 协程特性的支持,也需要 Nginx 事件机制的支持,两者结合在一起实现非阻塞网络 I/O。 遇到网络 I/O 时会交出控制权,把网络事件注册到 Nginx 监听列表中&a…

OpenSSH 用户枚举漏洞(CVE-2018-15473) 漏洞修复

OpenSSH 用户枚举漏洞(CVE-2018-15473)漏洞修复 1 漏洞说明2 漏洞修复3 相关问题 1 漏洞说明 2 漏洞修复 查看当前openssh版本: [rootizr0a05u4qferpr7yfhtotz ~]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 [rootizr0a05u4…

ChatGLM-6B一键安装,马上使用(windows)!!

产品特点 双语: 同时支持中文和英文。 高精度(英文): 在公开的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。 高…

MiniKube安装教程,简易版k8s,带你用最简单的方法体验k8s(学习环境通用)

Minikube安装教程 minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发,这能很方便的在本地进行k8s学习,减轻初学者对于k8s的安装困难。(信我,新手入门k8s就用这个够用了!先别去折腾生产环境的…

[pyqt5]右键窗口弹出菜单并触发菜单点击事件

from PyQt5.Qt import * import sysclass MyWindow(QWidget):# 自定义窗体def contextMenuEvent(self, evt: QContextMenuEvent) -> None:menu QMenu(self)new_action QAction(打开, menu)new_action.triggered.connect(self.open)close_action QAction(关闭, menu)close…

Jupyter的安装与启动

一、简介 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码、方程式、可视化和文本的文档,支持…

【编码魔法师系列_六大原则2】里氏替换原则(Liskov Substitution Principle LSP Principle)

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通…

BKP备份寄存器RTC实时时钟

BKP本质上是RAM寄存器,不能完全掉电不丢失,它的数据需要VBAT引脚提供的备用电源来维持。RTC复位和掉电不丢失是通过BKP来实现的。 目录 Unix时间戳 简介 计时标准​编辑 时间戳转换​编辑 示例代码 BKP 简介 BKP基本结构 RTC RTC简介 RTC框图 RT…

【100个 Unity实用技能】 | Unity中Text文本框 和 InputField文本输入框 内容换行问题【文末送书】

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

【深度学习】神经网络初学者指南

一、说明 这是一篇对神经网络的泛泛而谈的文章,我的意见是,先知道框架,而后知道每一个细节,这是学习人工智能的基本路线。本文就神经网络而言,谈到一些基础概念,适应于初学者建立概念。 二、神经网络定义 神…

初学Spring boot (一) Hello,World!

SpringBoot简介 回顾什么是Spring? Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。 Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。 Spring是如何简化Java开发的 为了降低Java…

element 表格

实现效果: 需求: 1. 左侧新增分类功能添加数据到左侧分类表格中。 2. 分类表格可以编辑和删除。 3. 右侧添加标签功能,添加标签至所属分类中。 4.右侧表格显示分类与所挂在当前分类下的所有标签。 5. 右侧表格内删除按钮,删除…

C++之模板类指向子类对象(一百四十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…