23种设计模式之模版方法模式

news2024/11/13 17:59:08

文章目录

    • 模版方法模式
    • 简单实现 - 炒菜
    • **总结**

模版方法模式

一、定义与概念
模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

二、作用与优势

  1. 代码复用
    • 模板方法模式将通用的算法框架提取到父类中,子类只需要实现特定的步骤,大大提高了代码的复用性。
    • 避免了重复编写相同的代码逻辑,减少了开发工作量。
  2. 算法框架固定
    • 确保了算法的整体结构稳定,不会因为个别子类的实现而改变。
    • 对于复杂的算法,通过模板方法可以更好地控制和管理整个流程。
  3. 易于扩展
    • 当需要增加新的功能或修改特定步骤时,可以通过创建新的子类来实现,不会影响到其他已有的代码。
    • 符合开闭原则,即对扩展开放,对修改关闭。
      在这里插入图片描述

简单实现 - 炒菜

以下是以炒菜为例的简单模版方法模式实现:
1、定义模板类,cookDish方法为模版方法。

public abstract class AbstractCookingRecipe {
    public final void cookDish() {
        heatOil();
        pourIngredients();
        stirFry();
        addSeasonings();
        dishOut();
    }

    abstract void heatOil();

    abstract void pourIngredients();

    abstract void stirFry();

    abstract void addSeasonings();

    abstract void dishOut();
}

2、继承模版类,实现抽象方法

public class StirFryVegetables extends AbstractCookingRecipe {

    @Override
    void heatOil() {
        System.out.println("在锅中倒入适量油,加热至七成热。");
    }

    @Override
    void pourIngredients() {
        System.out.println("将洗净的蔬菜倒入锅中。");
    }

    @Override
    void stirFry() {
        System.out.println("不断翻炒蔬菜,使其均匀受热。");
    }

    @Override
    void addSeasonings() {
        System.out.println("加入适量盐、生抽等调料。");
    }

    @Override
    void dishOut() {
        System.out.println("将炒好的蔬菜出锅装盘。");
    }
}

3、测试使用

public class TemplateTest {
    public static void main(String[] args) {
        new StirFryVegetables().cookDish();
    }
}

结果如下:

在锅中倒入适量油,加热至七成热。
将洗净的蔬菜倒入锅中。
不断翻炒蔬菜,使其均匀受热。
加入适量盐、生抽等调料。
将炒好的蔬菜出锅装盘。

总结

在这个实现中,抽象类AbstractCookingRecipe定义了炒菜的通用流程,具体的炒菜类(如StirFryVegetables)实现了这些抽象方法,从而按照特定的步骤完成炒菜操作。这样可以方便地扩展不同的炒菜菜谱,只需要继承抽象类并实现具体的方法即可。

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

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

相关文章

中智科学技术评价研究中心与中企数研究院实现全面合作

8月29日,中智科学技术评价研究中心与《中国企业报》集团数字化发展研究院在北京顺喜山庄成功举办“数字经济GBC生态系统管理平台”项目实施落地座谈会及研究院高层管理集训班,并签署了项目合作协议。此次合作标志着双方将在“数字中国发展战略”的大背景…

录屏神器Camtasia 2024中文永久激活版安装教程+汉化补丁 破解版激活码

它来了它来了,它带着Camtasia2024最新版来了! 录屏&剪辑软件 Camtasia 如期发布最新版,带来的新功能非常实用!我们今天带来的是Camtasia Studio 2024最新版,附带crack破解程序(注册机)和激…

基于yolov8的篮球计数检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的篮球计数检测系统是一种高效、精准的目标检测技术,专为篮球比赛中的篮球计数而设计。该系统利用YOLOv8这一先进的深度学习算法,通过实时分析比赛视频或图像,能够迅速且准确地识别并计数篮球的数量。 YOLOv8作为YO…

【系统架构设计师-2014年】综合知识-答案及详解

文章目录 【第1~2题】【第3~4题】【第5题】【第6~8题】【第9题】【第10~11题】【第12题】【第13题】【第14题】【第15题】【第16~17题】【第18题】【第19~21题】【第22~23题】【第24题】【第25题】【第26题】【第27~28题】【第29题】【第30题】【第31题】【第32题】【第33~34题…

《高等代数》范德蒙德行列式的应用

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:范德蒙德行列式的简单应用及其变形。 范德蒙德行列式的计算公式: 注:(1)用大下标减去小下标。 (2&#xf…

深入理解并实现——归并排序【C语言】

目录 一、概念 二、递归版实现 三、非递归实现 三、文件归并排序 小结 一、概念 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将…

【论文阅读】Single-Stage Visual Query Localization in Egocentric Videos

paper: code: 简介: 长篇自我中心视频的视觉查询定位需要时空搜索和指定对象的定位。之前的工作开发了复杂的多级管道,利用完善的对象检测和跟踪方法来执行 VQL(视觉查询定位)。然而,每个阶段…

智能创作与优化新时代:【ChatGPT-4o】在【数学建模】、【AI绘画】、【海报设计】与【论文优化】中的创新应用

目录 1. 引言 什么是ChatGPT4o? 背景与发展历史 2.chatgpt4o数学建模 常见的数学建模专业术语及其简要说明 一个具体的代码例子 问题描述 代码实现 代码说明 运行结果 3.chatgpt4o在论文 1.例如生成基于标签的推荐系统模型及算法研究 1. 摘要 2. 引…

微信搜一搜下面搜索发现是什么?收录规则因素有哪些?如何能被搜索发现话题标签收录?

前言:为什么想到写这个?上周白杨SEO玩赚流量群里的一个群友私下问我怎么能被微信里搜索发现这个话题标签收录,问规则是什么,所以今天就来简单分享一下,如果你也感兴趣,可以看看。 文章大纲: 1、…

Go 1.19.4 文件读写操作-Day 14

1. 文件读写操作 在我们对一个文件进行读写操作前,有一个必做步骤,那就是要先打开文件。 打开文件主要使用os模块的 Open 和 OpenFile 。 Open:适合读。OpenFile:适合读写。 2. 打开文件 2.1 Open 作用: 以只读方式打…

书生浦语-MindSearch

1.目的 利用SiliconCloud提供的免费Intern2.5-7B-Chat的API部署MindSearch。 2.过程 2.1 在GitHub上打开codespace主页 我们首先在GitHub上打开codespace,选择blank template。 然后打开一个Web端的vscode,将MindSearch进行clone mkdir -p /workspa…

二叉树详解(进阶)

目录 1. 二叉搜索树 1.1 基本概念 1.2 基本操作 1.3 性能分析 1.4 键值对 2. AVL树和红黑树 2.1 AVL树 2.2 红黑树 3. 红黑树模拟实现STL中的map与set 1. 二叉搜索树 1.1 基本概念 二叉搜索树(BST,Binary Search Tree)&#xff1a…

记录一次安装Studio卸载后再次安装反复打不开的问题

先说问题表现,低版本的安装后点击没反应,高版本的报错,如下图,反复卸载安装都没有用,网上也找了各种彻底卸载安卓Studio的方法也不行 Error occurred during initialization of VMagent library failed Agent OnLoad:…

【C++】unordered_set 容器的最全解析(什么是unordered_set?unordered_set的常用接口有那些?)

目录 一、前言 二、预备知识 💢关联式容器💢 💢键值对💢 💢哈希结构的关联式容器💢 三、unordered_set 详解 🔥unordered_set 的介绍 🔥unordered_set 的构造 &am…

解除 Excel 表格的文档保护全攻略

在日常工作和学习中,我们可能会遇到 Excel 表格被保护无法编辑的情况。别担心,今天就为大家分享几种解除 Excel 表格文档保护的方法。 一、导入腾讯文档 可以将受保护的 Excel 表格上传到腾讯文档。在部分情况下,腾讯文档会尝试自动解除表…

零基础国产GD32单片机编程入门(九)低功耗模式实战含源码

文章目录 一.概要二.GD32单片机低功耗基本介绍三.GD32单片机待机模式介绍四.待机低功耗例程实验五.工程源代码下载六.小结 一.概要 在生活中通过关掉用电器可以实现省电节能的目的,同样的道理单片机也可以通过这种方法实现降低功耗。单片机是由许多部件组成&#x…

ruoyi-vue-plus服务端打包报错的问题

对idea不熟,不知道在哪里输入打包命令,只会用手点击进行打包,然后就报错了 官方文档给的打包命令是 mvn clean package -D maven.test.skiptrue -P prod 从命令中可以看到跳过了maven测试,那么就要设置idea打包时跳过测试&…

k8s单master多node环境搭建-k8s版本低于1.24,容器运行时为docker

k8s 1.20.6单master多node环境搭建 1.环境规划2.初始化服务器1)配置主机名2)设置IP为静态IP3)关闭selinux4)配置主机hosts文件5)配置三台主机之间免密登录6)关闭交换分区swap,提升性能7&#xf…

【Python基础】字符串类型

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、Python 字符串类型2.1 Python访问字符串中的值2.2 Python 转义字符2.3 Python 字符串运算符2.4 Py…

Bluetooth: gatt profile

Gatt 主要是描述了attribute的排列方式; Attribute caching 这个机制允许client只搜索一次server即可,当重连后不需要再搜索直接使用之前的。如果server的服务发生了变化,需要通过 service change indication 告诉client; client…