模板模式

2023-11-06

1、模板模式的概念

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

2、模板模式的特点

  • 子类按需要重写父类中的方法。
  • 以抽象父类中的定义进行调用。

3、关于模板模式

  • 目的:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 解决问题:一些方法通用,却在每一个子类都重新写了这一方法。
  • 使用时机:有一些通用的方法。
  • 保证模式:将这些通用方法抽象出来。
  • 关键:在抽象类定义,其他步骤在子类实现。

4、优缺点

优点:

  • 封装不变部分,扩展可变部分。
  • 提取公共代码,便于维护。
  • 行为由父类控制,子类实现。

缺点:

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

5、使用场景

  • 有多个子类共有的方法,且逻辑相同。
  • 重要的、复杂的方法,可以考虑作为模板方法。

注意:为防止恶意操作,一般模板方法都加上final关键词。

6、模板模式的实现

将创建一个定义操作的Game抽象类,其中,模板方法设置为final,这样它就不会被重写。Cricket和Football是扩展了Game的实体类,它们重写了抽象类的方法。TemplatePatternDemo类使用Game来演示模板模式的用法。如下图:
在这里插入图片描述
(1)定义抽象类

创建抽象类Game:

public abstract class Game {
    
    //抽象方法,游戏初始化
    protected abstract void initialize();
    
    //抽象方法,游戏开始
    protected abstract void startPlay();
    
    //抽象方法,游戏结束
    protected abstract void endPlay();
    
    //模板方法
    public final void play() {
        initialize();
        startPlay();
        endPlay();
    }

}

(2)定义抽象类的扩展类

定义两个抽象类的扩展子类:

/*
 * Game类的扩展类
 */
public class LolGame extends Game{

    @Override
    protected void initialize() {
        System.out.println("正在初始化LOL!");       
    }

    @Override
    protected void startPlay() {
        System.out.println("加载完毕,LOL游戏正在进行!");     
    }

    @Override
    protected void endPlay() {
        System.out.println("游戏结束,恭喜获得胜利!");     
    }

}
/*
 * Game类的扩展类
 */
public class CfGame extends Game{

    @Override
    protected void initialize() {
        System.out.println("正在初始化CF!");       
    }

    @Override
    protected void startPlay() {
        System.out.println("加载完毕,CF游戏正在进行!");     
    }

    @Override
    protected void endPlay() {
        System.out.println("游戏结束,很遗憾失败了!");     
    }

}

(3)测试

public class TestTemplate {
    
    public static void main(String[] args) {
        
        Game lol = new LolGame();
        lol.play();
        System.out.println("-----------------");
        Game cf = new CfGame();
        cf.play();
    }

}

执行,控制台:
在这里插入图片描述
7、总结

模板模式是在抽象父类中公开定义方法,可以将一些通用的方法封装在这个方法中,子类可以根据需要来覆盖重写父类中的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板模式 的相关文章

随机推荐

  • 关于md文件插入视频链接的方法。(亲测可用)

    md文件中插入了HTML5的代码 如下
  • 【计算机基础知识9】前端设计模式与常见类型

    目录 一 前言 二 设计模式的基本概念和原则 三 创建型设计模式 四 结构型设计模式 五 行为型设计模式 六 MVC和MVVM框架中的设计模式 七 实际应用案例分析 一 前言 在软件开发领域 设计模式是一种解决常见问题的最佳实践 它可以帮助
  • Sqlalchemy join连表查询

    摘要1 https blog csdn net weixin 33804582 article details 92471702 摘要2 https www cnblogs com juandx p 5442752 html 摘要3 htt
  • RFID服装管理系统改善零售供应链

    随着时尚零售业的竞争日益激烈 RFID技术正快速地改变着服装管理的方式 我们将探讨RFID服装管理系统的核心优点 以及如何在零售供应链中充分利用它 首先 让我们了解一下RFID技术是什么 RFID是一种无线通信技术 通过使用RFID标签和R
  • 人机博弈-吃子棋游戏(二)算气

    算法过程如下 输入计算棋气的起始子 检查我方棋子其周边的空白 并查看此空白是否已经计算过气了 如果没有计算过气加一 如果已经计算则略过 进而递归调用计算我方棋子上下左右子的气 最后算法会返回棋串的子数和气数 算法注释十分详尽 这个计算棋子气
  • linux中Shell历史命令记录文件的路径是什么

    Bash shell在 bash history 表示用户目录 文件中保存了500条使用过的命令 这样能使你输入使用过的长命令变得容易 每个在系统中拥有账号的用户在他的目录下都有一个 bash history 文件 bash shell应该
  • shell变量的设置规则

    1 变量设置规则 2 变量赋值与运算 1 变量赋值 name lbg 等号前后不能有空格 name Lebron James 变量值中有空格要用双引号 echo n a m e 用 name
  • PT100热敏电阻原理解析

    什么是PT100 PT100电阻是指铂热电阻 其中PT是指 铂 元素 100是指铂热电阻的特性在0 时 电阻值刚好是100 所以通常称它为PT100热电阻或铂电阻 PT100是中低温区最常用的一种温度检测元件 其导体的电阻值随温度的增加而成
  • 嵌入式Linux驱动开发(I2C专题)(一)

    一 I2C协议 1 1 硬件连接 I2C在硬件上的接法如下所示 主控芯片引出两条线SCL SDA线 在一条I2C总线上可以接很多I2C设备 1 2 IIC传输数据的格式 1 2 1 写操作 流程如下 主芯片要发出一个start信号 然后发出
  • android studio报错Out of memory: GC overhead limit exceeded. Please fix the project‘s Gradle settings

    项目场景 提示 这里简述项目相关背景 例如 项目场景 从gitee上克隆下来的项目从android studio中打开 问题描述 提示 这里描述项目中遇到的问题 例如 数据传输过程中数据不时出现丢失的情况 偶尔会丢失一部分数据 APP 中接
  • scratch关于克隆停止的问题

    克隆这个代码在scratch中用处挺大的 但是在用的过程中也会出现一些问题 比如说克隆在到达一定数量之后会停止继续克隆 这是由于克隆是有个数限制的 昨天测了一下克隆体的个数限制是300个左右 如何去测 就是当作为克隆体启动时 用一个初始化为
  • word 安装

    目录 概述 word 安装 1 下载安装 2 解压运行 3 卸载移除 4 安装部署 5 激活 亲测可用 记录一下 概述 Office Tool Plus 是一个强大的 Office 部署工具 可以很方便地部署 Office 它基于 Offi
  • 基于遗传算法的多目标优化算法(matlab实现)

    1 理论基础 1 1 多目标优化及Pareto最优解 多目标优化问题可以描述如下 其中 f x 为待优化的目标函数 x为待优化的变量 Ib和ub分别为变量x的下限和上限约束 Aeq x beq为变量x的线性等式约束 A x b为变量x的线性
  • HBuilder X3.1.22安装教程(非常详细)从零基础入门到精通,看完这一篇就够了(附安装包)

    软件下载 软件 HBuilder X 版本 3 1 22 语言 简体中文 大小 278 95M 安装环境 Win11 Win10 Win8 Win7 硬件要求 CPU 2 0GHz 内存 4G 或更高 下载通道 百度网盘丨下载链接 http
  • RPA机器人流程适用性评估的9个要素

    组织通常可以从以下几个方面来考虑RPA机器人流程的筛选 确保在RPA机器人流程自动化过程中产生最大投资回报率 ROI 如何去选择有影响力且易于RPA机器人自动化的流程 1 影响成本和收入的流程 最具影响力的流程 例如 如果定价规则不明确 报
  • 17. 实战:手把手通关某音乐平台热门评论

    目录 前言 链接在评论区 目的 保姆级思路 最后奉上完整代码 运行效果 前言 众所周知 某音乐平台的评论区金句频出 热门评论更是美不胜收 我们也想要批量获取这些信息来做信息分析 数据处理等工作 也可以陶冶自己的情操 一举多得 所以我们今天来
  • 蓝以中老师《高等代数》第02章:向量空间与矩阵,笔记

    蓝以中高代第二章笔记
  • Android开源图表库MPAndroidChart

    MPAndroidChart是一款基于Android的开源图表库 MPAndroidChart不仅可以在Android设备上绘制各种统计图表 而且可以对图表进行拖动和缩放操作 应用起来非常灵活 和前面介绍的AChartEngine相比 MP
  • AutoSAR 学习笔记2:AutoSAR架构

    1 应用层 ASW 2 运行时环境层 RTE RTE 是专门为应用软件 AutoSAR 软件组件和 或 AutoSAR 传感器 执行器组件 提供通信服务的层 在 RTE 之上 软件架构风格从 分层 转变为 组件风格 AutoSAR 软件组件
  • 模板模式

    1 模板模式的概念 在模板模式 Template Pattern 中 一个抽象类公开定义了执行它的方法的方式 模板 它的子类可以按需要重写方法实现 但调用将以抽象类中定义的方式进行 这种类型的设计模式属于行为型模式 2 模板模式的特点 子类