当前位置: 首页 > news >正文

设计模式之模板模式TemplatePattern(五)

一、模板模式介绍

模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中定义的方式进行。

模板模式适用于通用步骤的操作,比如做菜,不管你是西红柿炒鸡蛋,还是土豆炖牛肉实现步骤都是一样的,备料,做菜,上菜。
再比如投放系统,不管你是投放巨量引擎,广点通还是百度,前期工作实现步骤也都是一样的,配置物料信息,构建投放对象,投放广告。

二、代码实例

1、DishTemplate抽象类

package com.xu.demo.templatePattern;/*** 做菜模板类* 用于定义做菜的执行步骤,所有菜都可以按照这种方式做菜**/
public abstract class DishTemplate {/*** 做菜执行步骤*/public final void doDish() {this.preparation();this.doing();this.carriedDishes();}/*** 备料*/public abstract void preparation();/*** 做菜*/public abstract void doing();/*** 上菜*/public abstract void carriedDishes();}

 2、DishEggsWithTomato子类

package com.xu.demo.templatePattern;/*** 西红柿炒鸡蛋**/
public class DishEggsWithTomato extends DishTemplate {@Overridepublic void preparation() {System.out.println("准备西红柿鸡蛋...");}@Overridepublic void doing() {System.out.println("开始炒西红柿鸡蛋...");}@Overridepublic void carriedDishes() {System.out.println("西红柿鸡蛋装盘...");}
}

3、DishOnionWithTofu子类

package com.xu.demo.templatePattern;/*** 小葱拌豆腐**/
public class DishOnionWithTofu extends DishTemplate {@Overridepublic void preparation() {System.out.println("准备小葱豆腐...");}@Overridepublic void doing() {System.out.println("开始炒小葱拌豆腐...");}@Overridepublic void carriedDishes() {System.out.println("小葱拌豆腐装盘...");}
}

4、TempaltePattern类

package com.xu.demo.templatePattern;/*** 模板模式* 抽象父类定义方法模板,子类自定义实现方式。**/
public class TempaltePattern {public static void main(String[] args) {System.out.println("----------西红柿炒鸡蛋----------");DishTemplate eggsWithTomato = new DishEggsWithTomato();eggsWithTomato.doDish();System.out.println("----------小葱拌豆腐----------");DishTemplate onionWithTofu = new DishOnionWithTofu();onionWithTofu.doDish();}
}

 运行结果:

三、Spring中的模板模式 

1、RestTemplate

相关文章:

设计模式之模板模式TemplatePattern(五)

一、模板模式介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中…...

划重点!PMP报考条件、报考步骤、考试内容、适合人群

参加PMP认证的好处,可以从几个方面来认识: 一、参加PMP认证与考试的过程,同时是一个系统学习和巩固项目管理知识的过程 二、参加PMP认证,您可以获得由PMI颁发的PMP证书 而拥有PMP认证表示你已经成为一个项目管理方面的专业人员…...

Java | Leetcode Java题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid / n][m…...

C#高级编程笔记-泛型

本章的主要内容如下&#xff1a; ● 泛型概述 ● 创建泛型类 ● 泛型类的特性 ● 泛型接口 ● 泛型结构 ● 泛型方法 目录 1.1 泛型概述 1.1.1 性能 1.1.2 类型安全 1.1.3 二进制代码的重用 1.1.4 代码的扩展 1.1.5 命名…...

(超简单)SpringBoot中简单用工厂模式来实现

简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表&#xff0c;比如按角色查询用户列表、按机构查询用户列表&#xff0c;用户信息需要从数据库中查询&#xff0c;因为不同的类型查询的逻辑不相同&#xff0c;因此简单用工厂模式来设计一下&#xff1b; 首先新建一个…...

java中的条件、循环和scanner类

if else ; 单行逻辑大括号可以省略&#xff1b;但是不建议省略&#xff1b; public static void main(String[] args) {boolean bool1 (Math.random() * 1000) % 2 > 1;System.out.println((Math.random() * 1000) % 2 "-" bool1);if(bool1) {System.out.prin…...

【Qt QML】Frame组件

Frame&#xff08;框架&#xff09;包含在&#xff1a; import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局&#xff0c;但需要自己对元素位置进行设置和定位&#xff0c;例如通过…...

Web API之DOM

DOM 一.认识DOM二.获取元素三.事件基础四.操作元素(1).改变元素内容(2).修改元素属性(str、herf、id、alt、title&#xff09;(3).修改表单属性(4).修改样式属性操作(5).小结 五.一些思想(1).排他思想(2).自定义属性的操作 六.节点操作1.认识2.节点层级关系3.创建和添加、删除、…...

windows驱动开发-内核编程技术汇总(六)

在驱动程序中使用文件 内核模式组件通过其对象名称引用文件&#xff0c;该对象名称是连接到文件的完整路径的 \DosDevices 。 在 Microsoft Windows 2000 及更高版本的操作系统上&#xff0c; \?? 等效于 \DosDevices。例如&#xff0c;C:\WINDOWS\example.txt 文件的对象名…...

Windows Server 2019虚拟机安装

目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址&#xff1a;Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址&#xff1a; 链…...

【软件工程】详细设计

目录 前言详细设计算法设计工具——判定表 前言 软件工程生命周期分为八个阶段&#xff1a; 问题定义—>可行性研究—>需求分析 —>概要设计—>详细设计—>编码与单元测试 —>综合测试—>软件维护 这节我们讲的是软件开发流程中的一个阶段&#xff0c;需求…...

在K8S中,集群可以做哪些优化?

在Kubernetes&#xff08;简称K8s&#xff09;集群中&#xff0c;可以进行多种优化以提升性能、稳定性和资源利用率。以下是一些常见的优化措施&#xff1a; 控制面组件优化&#xff1a; kube-apiserver 高可用与扩展&#xff1a;通过配置多个API服务器实例并使用负载均衡器分发…...

【C++】从零开始认识多态

送给大家一句话&#xff1a; 一个犹豫不决的灵魂&#xff0c;奋起抗击无穷的忧患&#xff0c;而内心又矛盾重重&#xff0c;真实生活就是如此。 ​​​​ – 詹姆斯・乔伊斯 《尤利西斯》 _φ(*&#xffe3;ω&#xffe3;)&#xff89;_φ(*&#xffe3;ω&#xffe3;)&…...

为什么叫“机器学习”Machine Learning 而不是“计算机学习”——深度学习Note

有一门学科“机器学习”火了起来&#xff0c;它是计算机科学与数学结合的产物&#xff0c;它的目的是使计算机“聪明”起来&#xff0c;实现人工智能。可是&#xff0c;令人困惑的是它明明就是计算机学习&#xff0c;为什么不叫“计算机学习”而叫“机器学习”呢&#xff1f;这…...

Spring Boot集成RabbitMQ-之6大模式总结

A.集成 一&#xff1a;添加依赖 在pom.xml文件中添加spring-boot-starter-amqp依赖&#xff0c;以便使用Spring Boot提供的RabbitMQ支持&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp&…...

后端开发面经系列 -- 滴滴C++一面面经

滴滴C一面面经 公众号&#xff1a;阿Q技术站 来源&#xff1a;https://www.nowcoder.com/feed/main/detail/38cf9704ef084e27903d2204352835ef 1、const在C和C区别&#xff0c;const定义的类成员变量如何初始化&#xff1f; 区别 C中的const&#xff1a; 在C中&#xff0c;c…...

Three.js的几何形状

在创建物体的时候&#xff0c;需要传入两个参数&#xff0c;一个是几何形状【Geometry】&#xff0c;一个是材质【Material】 几何形状主要是存储一个物体的顶点信息&#xff0c;在Three中可以通过指定一些特征来创建几何形状&#xff0c;比如使用半径来创建一个球体。 立方体…...

设计模式——单例模式(Singleton)

单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中的一种&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个唯一实例。这种模式在多种场景下都非常有用&#xff0c;比如配置文件的读取、数据库连接的创建、线程池的管理等。 实现…...

springboot3项目练习详细步骤(第二部分:文章分类模块)

新增文章分类 接口文档 业务实现 参数校验 文章分类列表 接口文档 业务实现 获取文章分类详情 接口文档 业务实现 更新文章分类 接口文档 业务实现 分组校验 问题 概念 实现步骤 总结 删除文章分类 接口文档 业务实现 该模块大部分请求的路径相同&…...

VUE中父组件向子组件进行传值

在 Vue 中&#xff0c;父组件向子组件传值主要通过在子组件的标签上绑定属性&#xff08;props&#xff09;的方式来实现。以下是一个具体的示例。 父组件&#xff08;ParentComponent.vue&#xff09;: <template><div><!-- 父组件中使用子组件&#xff0c;并传…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...