CH01_适应设计模式

news2024/11/17 7:32:38

Iterator模式(迭代器模式)

迭代器模式(Iterator),提供一种方法,顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示。

类图结构

在这里插入图片描述

说明

  • Iterator(迭代器)

    该角色负责定义按顺序逐个遍历元素的接口(API)。类图中定义的hasNext和next两个函数。hasNext用于判断是否存在下一个元素,next用于获取元素

  • ConcreteIterator(具体的迭代器)

    该角色负责实现Iterator定义的接口(API)

  • Aggregate(集合)

    该角色负责定义创建Iterator接口对象。

  • ConreteAggregate(具体的集合)

    该角色负责实现Aggregate角色所定义的接口(API)。它会创建出来具体的Iterator角色,即ConcreteIterator角色。

其他

原书中给的例子存在不恰当的地方:BookShelf类与BookShelfIterator之间是相互引用关系,这不是一个好现象;可以将BookShelf中的记录Book对象的数组迁移到BookShelfIterator,这样只保留BookShelf对BookShelfIterator的引用,降低类之间的耦合。

Adapter模式(适配器模式)

适配器模式(Adapter),将一个类的接口转成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

类图

继承实现

在这里插入图片描述

委托实现

在这里插入图片描述

说明

  • Target(对象)

    该角色负责定义所需要的方法。

  • Client(请求者)

    该角色负责使用Target角色所定义的方法进行具体处理。

  • Adaptee(被适配)

    被适配的角色,Adaptee是一个持有既定方法的角色,Target因某种原因无法直接使用这些方法。

  • Adapter(适配)

    Adapter模式的主人公。使用Adapter角色的方法来满足Target角色的需求,这是Adapter模式的目的,也是Adapter角色的作用。

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

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

相关文章

洛谷P1049装箱问题 ————递归+剪枝+回溯

没没没没没没没没没错,又是一道简单的递归,只不过加了剪枝,我已经不想再多说,这道题写了一开始写了普通深搜,然后tle了一个点,后面改成剪枝,就ac了,虽然数据很水,但是不妨…

基于光纤环形激光器的optisystem仿真及其传感应用

近年来,光纤传感器在航空航天领域,工业制造,医疗等领域引起了越来越多的关注,因为他们体积小,结构简单,灵敏度高,抗电磁干扰强,防腐性能好的特点。各种各样的传感器结构被设计出来&a…

VMware Workstation Pro 安装虚拟机,无法打开此虚拟机电源 因为它需要使用x86架构,架构冲突

本来我下的iso文件,可以看到他是64的,但是ubuntu没有86的,我只能去下载cenos的 用这个去安装虚拟机就好了

在 vue3 中使用 Recorder 实现录音并上传(mp3、wav)兼容 PC 和移动端

一、Recorder 介绍 使用 Recorder插件可以在网页中进行录音。生成 blob 文件并可以自定义上传,同时,录音过程中会显示可视化波形,同时能够做到兼容PC端、Android、和iOS,十分好用! Recorder github 首页 插件效果展…

深入理解MySQL索引及事务

✏️✏️✏️今天给各位带来的是关于数据库索引以及事务方面的基础知识 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手&#…

[Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具

一.Docker Swarm集群raft算法讲解 Raft :一致性算法,在保证大多数管理节点存活的情况下,集群才能使用, 所以就要求如果集群的话, manager 节点必须 >3 台 ,如果是两个台,其中一台宕机&#…

安卓 Android Studio更换app的图标

大概完成了一个app,在测试机的界面app的icon显示的是默认安卓图标,找了一个简单的更换方法 打开 Androidmanifest.xml 文件,在 application 找到代码 android:icon"mipmap/ic_launcher" 按下Ctrl鼠标左键转到相应位置 如图在背景…

BUUCTF [GXYCTF2019]gakki 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 下载附件,解压得到一张.jpg图片。 解题思路: 1、放到010 Editor中看一下,找到rar压缩包的文件头。使用Kali中的binwalk工具…

selenium的基础语法

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️山水速疾来去易,襄樊镇固永难开 ☁️定位页面的元素 参数:抽象类By里…

迈巴赫S480升级电动后门 手势控制开关 更加方便

安装了电动后门的迈巴赫S480,从原来的触摸门把手和门内拉手开关门,增加了钥匙控制、前排显示屏控制、后门按键开关控制、后排娱乐屏控制等多种开关门方式,将一个待客之礼体现出多种不一样的尊贵感受。 中控显示屏由驾驶者控制,可以…

ruoyi-plus-vue docker 部署

本文以 ruoyi-vue-plus 5.x docker 部署为基础 安装虚拟机 部署文档 安装docker 安装docker 安装docker-compose 配置idea环境 上传 /doicker 文件夹 到服务器;赋值 777权限 chmod -R 777 /docker idea构建 jar 包 利用 idea 构建镜像; 创建基础服务 docker…

[SWPUCTF 2021 新生赛]PseudoProtocols

题目很明确了就是伪协议 php://filter/convert.base64-encode/resourcehint.php 提交的伪协议的内容需要是 I want flag,就会echo flag 方法1:adata://text/plain,I want flag 方法2:adata://text/plain;base64,SSB3YW50IGZsYWc

NET 8.0 中新的变化

1性能提升 .NET 8在整个堆栈中带来了数千项性能改进 。默认情况下会启用一种名为动态配置文件引导优化 (PGO) 的新代码生成器,它可以根据实际使用情况优化代码,并且可以将应用程序的性能提高高达 20%。现在支持的 AVX-512 指令集能够对 512 位数据向量执…

从零开始学优惠券样式代码编写,让你的网站焕然一新!

样式1&#xff1a; 代码实例&#xff1a; <div class"box"><div class"itemBox"><div class"leftBox">全额抵扣</div><div class"rightBotton"><button>立即使用</button></div><…

Mac开发环境——MacOSX安装与配置Anaconda与PyCharm详细流程

一、安装与使用Anaconda 1.简介 Anaconda 是一个用于数据科学、机器学习和科学计算的开源发行版和包管理器。有许多可用于数据处理、分析和建模的工具和库&#xff0c;并提供了一个方便的环境管理系统。Anaconda 包含了 Python 解释器和许多常用的 Python 包&#xff0c;以及…

自动化部署 / 扩容openGauss —— Ansible for openGauss

前言 大家好&#xff0c;今天我们为大家推荐一套基于 Ansible 开发的&#xff0c;自动化部署及扩容 openGauss 的脚本工具&#xff1a;Ansible for openGauss&#xff08;以下简称 AFO&#xff09;。 通过AFO&#xff0c;我们只需简单修改一些配置文件&#xff0c;即可快速部署…

c++数学表达式解析求值库推荐

让程序支持自定义的数学计算器是常用功能&#xff0c;找了几个用来数学表达式解析求值的库&#xff0c;有几个看起来很不错。 各个数学表达式求值的综合对比 对比结果如下&#xff0c;ExprTK得分最高&#xff0c; TinyExpr得分最低&#xff0c; GitHub - ArashPartow/math-par…

【Linux】EVIOCGBIT

EVIOCGBIT(ev, len) 该怎么理解&#xff1f; 我们可以推断出&#xff0c;它是一个宏&#xff0c;它的前两个参数已经确定了&#xff0c;具体的功能由后两个参数(ev,len)来决定。Linux-4.9.88\include\uapi\linux\input.h #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, E, 0x20 …

关于提示SLF4J: Class path contains multiple SLF4J bindings的问题解决

今天搭建hbase的时候启动hbase的时候shell面板输入了一大堆日志&#xff0c;如下&#xff1a; stopping hbase.....................SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/opt/software/hadoop-3.1.3/share/hadoop/common/l…

基于ThinkPHP8 + Vue3 + element-ui-plus + 微信小程序(原生) + Vant2 的 BBS论坛系统设计【PHP课设】

一、BBS论坛功能描述 我做的是一个论坛类的网页项目&#xff0c;每个用户可以登录注册查看并发布文章&#xff0c;以及对文章的点赞和评论&#xff0c;还有文件上传和个人签名发布和基础信息修改&#xff0c;管理员对网站的数据进行统计&#xff0c;对文章和文件的上传以及评论…