设计模式、系统设计 record part05

news2025/1/6 16:55:48

行为型模式

在这里插入图片描述
在这里插入图片描述
模板方法模式、解释器模式是类型为模式,


模板方法模式

在这里插入图片描述
在这里插入图片描述
模板方法(Template Method)
抽象类(Abstract Class)
抽象方法(Abstract Method)
具体方法(Concrete Method)
钩子方法(Hook Method)
具体子类(Concrete Class)
在这里插入图片描述

//抽象类,定义模板方法、基本方法
public abstract class AbstractClass{
	//模板方法
	public final void cookProcess(){
	   pourOil() //倒油
	   heatOil() // 加热油
	   pourVegetable() // 倒入蔬菜
	   pourSauce() // 倒入酱料
	   fry() // 炸
	}
	//1.倒入食用油
	public void pourOil(){
		System.out.println('倒油')
	}
	 //2. 热油的方法
	public void heatOil() {
  		System.out.println("热油");
	}
	// 3.导入蔬菜,由于导入的蔬菜不同,咱们使用抽象方法声明
	public abstract void pourVegetable();
	// 4. 导入的调味品也不同
	public abstract void pourSauce();
	// 5. 翻炒过程都一样,声明普通方法
	public void fry(){
   		System.out.println("炒菜炒到熟...");
	}

上面的代码就是 模板方法模式中抽象类(Abstract Class) AbstractClass,里面的 模板方法(Template Method)cookProcess() 谁要炒菜都可以调用,
具体实现类,一个子类 包菜,如下:
在这里插入图片描述
另一个子类 菜心,如下:
在这里插入图片描述
一个测试类 Client,如下:
在这里插入图片描述
炒包菜,
1.new ConcreteClass_BaoCai()
2.使用父类的方法 cookProcess()
在父类的 cookProcess() 方法中,除了子类改写的pourVegetable()、pourSauce() (这2个方法是父类中的抽象方法(Abstract Method)被子类改写,所以用子类自己的)用子类自己的,其他几个(其他几个都是父类的具体方法(Concrete Method),子类没有重写,所以直接用父类的)都用父类的。
运行结果,如下:
在这里插入图片描述
在这里插入图片描述


策略模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
抽象策略(Strategy)
具体策略(ConcreteStrategy)
环境(Context)
在这里插入图片描述
抽象策略(Strategy)Strategy 接口,如下:
在这里插入图片描述
具体策略 1(ConcreteStrategy)StrategyA 实现 Strategy 接口,如下:
在这里插入图片描述
具体策略 2(ConcreteStrategy)StrategyB 实现 Strategy 接口,如下:
在这里插入图片描述
具体策略 3(ConcreteStrategy)StrategyC 实现 Strategy 接口,如下:
在这里插入图片描述
环境(Context)SaleMan ,它持有Strategy 接口的对象作为自己的属性,如下:
在这里插入图片描述
一个测试类 Client,如下:
在这里插入图片描述
测试结果如下:
在这里插入图片描述
在这里插入图片描述


命令模式

在这里插入图片描述
在这里插入图片描述
抽象命令类(Command)
具体命令类(Concrete Command)
实现者、接收者(Receiver)
调用者、祈祷者(Invoker)
October2024the09thWednesday(MTWTFSS)
在这里插入图片描述
1.调用者、祈祷者(Invoker)服务员 waiter 持有 抽象命令类(Command),发起命令,
2.实现者、接收者(Receiver)厨师 seniorChef 真正干活的人 做饭,被 具体命令类(Concrete Command)持有和调用,
3.(Invoker)通过 (Command)调用(Receiver)干活
实验包含类和接口如下:
在这里插入图片描述
抽象命令类(Command)Commnad接口,代码如下:
在这里插入图片描述
具体命令类(Concrete Command)OrderCommand 实现接口Commnad,代码如下
在这里插入图片描述
在这里插入图片描述
}
订单类,Order 暂时没有角色,只是辅助本示例的实验,如下:
在这里插入图片描述
}
实现者、接收者(Receiver)SeniorChef 真正干活的人制作顾客点的菜品,如下:
在这里插入图片描述
调用者、祈祷者(Invoker)Waitor,持有Commnad接口,如下:
在这里插入图片描述
测试类 Client ,代码如下:
在这里插入图片描述
在这里插入图片描述
就是说,所有的类都提前做好了准备,然后由调用者、祈祷者(Invoker)Waitor 来发出命令,其他类各司其职,最后再由实现者、接收者(Receiver)SeniorChef 来接收命令并完成做饭任务。
执行结果,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


责任链模式

在这里插入图片描述
在这里插入图片描述
抽象处理者(Handler)
具体处理者(Concrete Handler)
客户类(Client)
在这里插入图片描述
实验包含的类,如下:
在这里插入图片描述
请假条 LeaveRquest ,没有角色,代码如下:
在这里插入图片描述
抽象处理者(Handler)父类 Handler,代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
}
}
具体处理者1(Concrete Handler)GroupLeader 子类,代码如下:
在这里插入图片描述
具体处理者3(Concrete Handler)GeneralManager 子类,代码如下:
在这里插入图片描述
具体处理者2(Concrete Handler)Manager 子类,代码如下:
在这里插入图片描述
测试类 Client,代码如下
在这里插入图片描述
测试结果,如下:
在这里插入图片描述
如果请假条改成3天,如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
若再改请假条到7天,如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
October2024the10thThursday

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

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

相关文章

详细解读“霸王面”战术

“霸王面”战术是指在没有得到雇主面试通知的情况下,强行加入面试,以此争取工作机会的求职策略。以下将以3000字左右的篇幅,通过生动形象的例子详细解释这一战术。 一、背景介绍 在当今竞争激烈的就业市场中,求职者需要经历网申…

2.1 App测试与发布指南

欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 系统架构2 APP测试范围3 APP发布流程4 发布策略 前言 在当今数字化时代,移动应用程序(APP)和Web应用程序是两种主要的软件交付方式。本文详…

arm imx6ull docker启动失败问题查找与解决 内核配置相关

1、增加POSIX Message qeue:could not get initial namespace: no such file or directory CONFIG_POSIX_MQUEUEy 2、增加namespace failed to set to initial namespace CONFIG_NAMESPACESy 3、创建网络失败,veth配置:docker create endp…

40条经典ChatGPT论文指令,圈定选题和进行论文构思

目录 1、用ChatGPT圈定选题范围2、用ChatGPT生成研究方法和思路3、用ChatGPT扩展论文观点和论证4、用ChatGPT辅助论文结构设计5、如何直接使用ChatGPT4o、o1、OpenAI Canvas6、OpenAI Canvas增强了啥?7、编程功能增强 👇 ChatGPT o1网页入口在文末&#…

光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输

自动驾驶技术正快速演进,对实时数据处理能力的需求激增。光路科技推出的TSN(时间敏感网络)交换机,在比亚迪最新车型中的成功应用,显著推动了这一领域的技术进步。 自动驾驶技术面临的挑战 自动驾驶系统需整合来自雷达…

CentOS系统解压缩.7z后缀的文件

先安装工具 sudo yum install p7zip p7zip-plugins 解压缩 7z x mvtec3d.7z x参数表示解压并保持原有目录结构。 有报错 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (localeen_US.UTF-8,Utf16on,HugeFileson,64 bits,64 CP…

马志威新剧《黑色月光》开播 “海王”梁正贤角色再升级

由优酷、TVB联合出品,77工作室制作的《黑色月光》于10月9日在优酷视频上线播出。该剧由知名导演钟澍佳担任总监制,杨茜尧、马志威等TVB演员主演,故事以公关行业为背景,讲述了职场女性余满月曾被富豪蒋家害得家破人亡,精…

C++ 算法学习——1.8 单调队列算法

单调队列(Monotonic Queue)是一种特殊类型的队列,通常用于解决一些数组或序列相关的问题。和单调栈类似,单调队列也具有一些特定的性质,在解决一些问题时非常有用。以下是关于单调队列的一些重要点: 定义&a…

《14天从0到1学Java》第二天之01Java中的分支结构if语句

Hello,大家好,我是Feri,一枚十多年的程序员,研究生,关注我,且看一个平凡的程序员如何在自我成长,也为各位小伙伴提供编程相关干货知识,希望在自我蜕变的路上,我们一起努力…

解决SqlServer自增主键使用MybatisPlus批量插入报错问题

报错 SqlServer 表中主键设置为自增,会报以下错误。 org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获…

深入理解HTTP Cookie

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 HTTP Cookie定义工作原理分类安全性用途 认识 cookie基本格式实验测试 cookie 当我们登录了B站过后,为什么下次访问B站就…

uni-app使用v-show编译成微信小程序的问题

问题 在uni-app使用v-show语法编译成微信小程序会有一个问题 当我们设置成v-show"false" 在Hbuilder X里面确实没有显示 然后运行到 微信开发程序里面 发现显示了出来,说明设置的 v-show"false"没有起作用 解决办法 首先去uniapp官网查看v…

KDTS 实现MySQL至KingbaseES迁移实践

此文章以linux环境实践,KingbaseES一下使用KES代替。 KDTS KDTS工具安装KES时会一起安装,一般存在目录为:ClientTools目录下guitools文件夹中 启动 进入KDTS-WEB下bin目录,执行sh文件 cd /opt/Kingbase/ES/V8/ClientTools/guit…

汽车胶黏剂市场研究:预计2030年全球市场规模将达到67.4亿美元

汽车胶黏剂是指专门用于汽车制造和维修过程中,用于粘接、密封和固定各种汽车部件的化学材料。它们在汽车行业中扮演着关键角色,广泛应用于车身、内饰、玻璃、电子元件和其他组件的粘接与密封。汽车胶黏剂旨在提高汽车的结构强度、耐用性、密封性以及舒适…

【JS】浏览器切换标签页导致计时器不准

现有一段计时器代码 function count() {let n 0const timer setInterval(() > {console.log(n);if (n > 200) {clearInterval(timer)}n}, 10) } count()效果如下,当计时过程中切换标签页,定时器的时间会放缓,再次切回标签页后&#…

MMDetection研究-1.入门及框架

记录MMDetection研究过程 0.前言 参考: 1.MMDetection框架入门教程(完全版) 2. 1.框架概述 MMDetection是商汤和港中文大学针对目标检测任务推出的一个开源项目,它基于Pytorch实现了大量的目标检测算法,把数据集构建、模型搭建、训练策略等过程都封装成了一个个模块,…

数据排列组合实现

示例 将以下几组数据 (“01”, “02”),(“A1”, “A2”, “A3”),(“B1”, “B2”),(“D1”, “D3”)排列组合成,如:01:…

Isaac Sim软体仿真(以果实采摘场景为例)

如题,在做果蔬采摘的相关项目,背景是通过Isaac Sim做基于强化学习的果蔬采摘,因此简单搭建了一下场景。 效果如下图: 场景 物理环境(重力等):Create --> Physics --> Physics Scene   地面:Create --> Physics --> Ground Plane   灯光:新建文件自带…

基于SpringBoot+Vue的疫情居家办公系统(带1w+文档)

基于SpringBootVue的疫情居家办公系统(带1w文档) 基于SpringBootVue的疫情居家办公系统(带1w文档) 与传统疫情居家办公管理方案对比,应用疫情居家办公管理系统具备很多特点:最先,可以有效地提高疫情居家办公管理信息查找,仅需键入…

NL2SQL之DB-GPT-Hub详解篇:text2sql任务的微调框架和基准对比

NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比 随着生成式人工智能(Artificial Intelligence Generated Content&#xff0c;简写为 AIGC)时代的到来&#xff0c;使用大规模预训练语言模型(LLM)来进行 text2sql 任务的 sql 生成也越来越常见。基于 LLM 的…