设计模式之访问者模式(下)

news/2024/10/22 10:56:47/
3)访问者模式与组合模式联用
1.概述

访问者模式中,包含一个用于存储元素对象集合的对象结构,可以使用迭代器来遍历对象结构,同时具体元素之间可以存在整体与部分关系,有些元素作为容器对象,有些元素作为成员对象,可以使用组合模式来组织元素。

2.结构图

在这里插入图片描述

4)总结
1.优点
  • 增加新的访问操作很方便。

  • 将有关元素对象的访问行为集中到一个访问者对象中,而不是分散在一个个的元素类中,类的职责更加清晰,有利于对象结构中元素对象的复用,相同的对象结构可以供多个不同的访问者访问。

  • 让用户能够在不修改现有元素类层次结构的情况下,定义作用于该层次结构的操作。

2.缺点
  • 增加新的元素类很困难。

  • 访问者模式要求访问者对象访问并调用每一个元素对象的操作,这意味着元素对象有时候必须暴露一些自己的内部操作和内部状态,否则无法供访问者访问。

3.适用场景
  • 一个对象结构包含多个类型的对象,希望对这些对象实施一些依赖其具体类型的操作,在访问者中针对每一种具体的类型都提供了一个访问操作,不同类型的对象可以有不同的访问操作。

  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。

  • 对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。


http://www.ppmy.cn/news/1442563.html

相关文章

「Kafka」Kafka单机和集群安装(二)

「Kafka」Kafka单机和集群安装(二) 一、单机启动1. 下载安装Kafka2. 启动ZooKeeper2. 启动Kafka 二 、集群启动1. 安装zookeeper2. 安装kakfa3. 封装启动脚本 一、单机启动 1. 下载安装Kafka 阿里云下载地址:Kafka阿里云镜像站,官…

​LeetCode解法汇总2385. 感染二叉树需要的总时间

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给你一棵二叉树的根节点 root &#xff0…

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法,它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制,比如日志必须是连续的,只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上,Raft算法相对…

【神经网络结构可视化】PlotNeuralNet的安装、测试及创建自己的神经网络结构可视化图形

文章目录 前提准备1、下载MikTeX2、下载Git bash3、下载PlotNeuralNet 进行测试1、解压PlotNeuralNet-master.zip2、打开Git bash3、 在my_project中查看生成的pdf文件 创建自己的神经网络结构可视化图形 前提准备 1、下载MikTeX 下载链接: MikTeX ( https://mikt…

flash attention 参数(笔记)

目录 一、flash_attn_varlen_qkvpacked_func 二、flash_attn_varlen_kvpacked_func 三、flash_attn_varlen_func 四、flash_attn_with_kvcache 五、flash_attn_func flash官方 版本: flash-attn 2.5.7 flash-attention/flash_attn/flash_attn_interface.py at main Dao-…

【黑马点评Redis——004达人探店】

1.发布探店笔记 2.点赞 利用Redis中的Set集合来判断是否点赞过。 3.点赞排行榜 可以通过SortedSet来按点赞时间进行排序。 4.好友关注 4.1.关注和取关 4.2.共同关注 可以通过set实现交集的功能 4.3.关注推送 4.3.1 拉模式 拉模式(Pull)&#x…

mac 桌面不能右键 文件也不见了 但在finder的桌面上有

mac 桌面不能右键 文件也不见了 但在finder的桌面上有 出现该现象,可能是因为安装了带有隐藏桌面文件功能的软件,无意中操作引起的。可以利用终端轻松解决: 1、在Launchpad中找到终端并打开: 2、粘贴如下代码,回车即…

PHP利用phpmailer实现邮件发送功能

要在PHP中实现发送邮件验证码的功能,你需要使用一些特定的库来帮助你处理邮件发送的任务。PHPMailer是一个常用的库,它可以帮助你轻松地发送电子邮件。 以下是一个简单的例子,展示了如何使用PHPMailer库来发送包含验证码的电子邮件: 首先,你需要安装PHPMailer库。你可以通…