软件设计师-重点的行为型设计模式

news2024/10/7 10:26:06

一、命令模式(Command):

意图:(上午题)

  • 将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

结构:

适用性:

  • 抽象出待执行的动作,以参数化某对象。Command模式是过程语言中,回调(Callback)机制的一个面向对象的替代品。
  • 在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。
  • 支持取消操作。Command的Execute操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command 接口必须添加一个 Unexecute 操作,该操作取消上一次 Execute 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用Unexecute 和Execute来实现重数不限的“取消”和“重做”。
  • 支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在 Command 接口中添加装载操作和存储操作,可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。

二、中介模式/调停者模式(Mediator):

意图:

  • 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

结构:

适用性:

  • 一组对象以定义良好,但是复杂的方式进行通信,产生的相互依赖关系结构混乱,且难以理解。
  • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
  • 想定制一个分布在多个类中的行为,而又不想生成太多的子类。

三、状态模式(State):

意图:

  • 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

结构:

适用性:

  • 一个对象的行为决定于它的状态,并且它必须在运行时刻根据状态改变它的行为。
  • 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得开发者可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象独立变化。

四、访问模式(Visitor):

意图:

  • 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下,定义作用于这些元素的新操作。

结构:

适用性:

  • 一个对象结构包含很多类对象,它们有不同的接口,而用户想对这些对象实施一些依赖于其具体类的操作。**
  • 需要对一个对象结构中的对象进行很多不同的,并且不相关的操作,而又想要避免这些操作“污染”这些对象的类。Visitor 使得用户可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用 Visitor 模式让每个应用仅包含需要用到的操作。
  • 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变.那么可能还是在这些类中定义这些操作较好。

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

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

相关文章

前端实现导入Excel进行数据展示、导出

需求 一个 excel 文档 需要对文档里面的数据进行筛选拆分重组 由于数据量巨大 后端又抽不出来手 于是使用纯前端解决方案 解决思路 前端导入excel 把 excel 的数据解析为 json 格式 对数据进行相应操作后 重新导出为新 excel 虽笨但有效 第一步 导入excel 该方案需引…

HDFS架构

HDFS 是一个主从 Master/Slave 架构一个 HDFS 集群包含一个 NameNode,这是一个 Master Server,用来管理文件系统的命名空间,以及协调客户端对文件的访问一个 HDFS 集群包含多个 DataNode,用来存储数据HDFS 会对外暴露一个文件系统命名空间,并允许用户数据以文件的形式进行存储在…

Ubuntu服务器创建新用户及解决新用户登录Access denied问题

目录 Ubuntu服务器创建新用户及解决新用户登录Access denied问题创建账号步骤创建用户只创建用户添加用户到sudo组 允许账号远程连接重启ssh服务 删除账号要删除用户而不删除用户文件如果要删除并且删除用户的家目录和邮件 查询指令查看所有用户查询特定用户账户信息查看用户组…

如何下载钉钉群直播回放:完整步骤解析

在当今快节奏的商业和教育环境中,钉钉群直播已经成为了沟通和学习的重要工具。直播结束后,很多观众都希望回顾内容,但却不知如何开始。如果你错过了实时直播,或者只是想再次观看精彩的演讲和讨论,那么下载钉钉群直播回…

商超物联网方案-人员和资产管理配置指南~配置人员和资产管理示例

配置人员和资产管理示例 组网图形 图1 配置人员和资产管理示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 某商场经常发现资产遗失或寻找不到。为降低财产损失,商场希望能统一监控资产所在位置和移动路径,以便掌握…

2024年Q1季度白酒行业数据分析:消费升级下,白酒均价上涨

前段时间,飞天茅台被曝批发参考价再次下探。而从线上市场的整体情况来看,白酒行业均价同比去年却有所上涨。鲸参谋数据显示,白酒均价在750元左右,同比去年上涨了14%。 尽管白酒行业均价有所上涨,但今年第一季度表现不…

java设计模式 -- 工厂模式

1、基本概念 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 工厂…

Spark-机器学习(8)分类学习之随机森林

在之前的文章中,我们学习了分类学习之支持向量机决策树支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞&a…

工业交换机的封装与防尘防水设计

随着工业自动化程度的不断提升,工业交换机作为工业网络的核心设备之一,其稳定可靠的通信性能对于生产环境至关重要。而在恶劣的工业环境中,尘土、湿气等因素常常会对设备的稳定性和持久性造成挑战。因此,工业交换机的封装设计和防…

21 JavaScript 学习:一些误区和易错点

赋值运算符应用错误 在 JavaScript 中,赋值运算符(Assignment Operators)用于给变量赋值。常见的赋值运算符包括 、、-、*、/ 等。如果赋值运算符的应用不正确,可能会导致程序出现错误或产生意外的结果。 以下是一些常见的赋值运…

有趣的 CSS 图标整合技术!sprites精灵图,css贴图定位

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

ubuntu20.04安装RabbitMQ 3.11.19+Erlang 25.3.1

1、检查RabbitMQ、Erlang版本 Erlang Version Requirements | RabbitMQ 2、ubuntu20.04对应的是 focal 3、下载安装Erlang 下载地址:http://packages.erlang-solutions.com/erlang/debian/pool/ sudo dpkg -i esl-erlang_25.3-1~ubuntu~focal_amd64.deb sudo apt…

微服务使用SockJs+Stomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(二)

大家好,我是程序员大猩猩。 上次我们实践了,Java后端如何完成SockJSStomp的配置实现。 微服务使用SockJsStomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(一) 那么今天我们做一下web vue端的是如何来实现…

Docker 中安装单体架构 MySQL 的 Shell 脚本

该脚本用于实现 root 用户在 Linux 操作系统下的 Docker 中安装单体架构 MySQL Shell 脚本 Git 仓库地址 Gitee:https://gitee.com/tongchaowei/common-shell/tree/main/root 执行脚本 bash ./docker-mysql-install-single.sh需要注意的 该脚本会先检查是否安…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例(AP与AC间二层转发) 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示,某企业的移动终端通过WLAN连接网络,AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

Elasticsearch中对文章进行索引和查重

解决思路 要在Elasticsearch中对文章进行索引和查重,可以按照以下步骤操作: 安装Elasticsearch并启动服务。 安装Python的Elasticsearch客户端库,可以使用pip install elasticsearch命令进行安装。 编写Python代码,使用Elastic…

照片特定风格变换Stylar AI;GPT-4V开源替代方案InternVL;纯C/C++实现的Stable Diffusion库;基于AI的数据爬取

✨ 1: AI Photo Filter Stylar AI是一款功能强大的AI图像编辑与设计工具,提供无与伦比的图片组合和风格控制。 AI Photo Filter,简言之,就是使用人工智能技术来改善或改变图片的风格、质量和元素组合的一种工具。 如果你想将你的照片转换成…

如何看待Agent AI智能体的未来

Agent AI智能体的未来 Agent AI智能体,也称为自主代理或智能代理,是指能够自主执行任务、与环境交互并作出决策的计算机程序或系统。这些智能体通常具备学习、适应和推理的能力,能够在复杂和不确定的环境中执行任务。随着技术的进步&#xf…

爬虫自动调用shell通过脚本运行scrapy爬虫(crawler API)

一、爬虫时如何同时调用shell 1)终端cd项目>>scrapy crawl example 2)打开example.py import scrapy from scrapy.shell import inspect_response#引入shellclass ExampleSpider(scrapy.Spider):name "example"allowed_domains ["example.com"]…

【EI会议|稳定检索】2024年传感技术与图像处理国际会议(ICSTIP 2024)

2024 International Conference on Sensing Technology and Image Processing 一、大会信息 会议名称:2024年传感技术与图像处理国际会议会议简称:ICSTIP 2024收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网:htt…