Java设计模式(适配器模式)
定义
将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。
角色
目标抽象类(Target):目标抽象类定义客户所需的接口(在类适配器中,目标抽象类只能是接口)。
适配器类(Adapter):它可以调用另一个接口,做为转换器对Adaptee和Target进行适配。
适配者类( Adaptee ):即被适配的角色,通常是客户希望使用但又无法直接调用的业务方法。
优点
将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构
增加了类的透明性和复用性,提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用 灵活性和扩展性非常好
类适配器模式:置换一些适配者的方法很方便
对象适配器模式:可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类
缺点
类适配器模式:
(1) 一次最多只能适配一个适配者类,不能同时适配多个适配者;
(2) 适配者类不能为最终类;
(3) 目标抽象类只能为接口,不能为类
(4) 使用继承耦合性过强,被适配方法发生变化则会导致适配器也要做相应修改
对象适配器模式:
在适配器中置换适配者类的部分方法比较麻烦
适用场景
系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码
创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作
案例
在为某学校开发教务管理系统时,开发人员发现需要对学生成绩进行排序和查找,该系统的设计人员已经开发了一个成绩操作接口ScoreOperation,在该接口中声明了排序方法Sort(int[]) 和查找方法Search(int[], int),为了提高排序和查找的效率,开发人员决定重用现有算法库中的快速排序算法类QuickSortClass和二分查找算法类BinarySearchClass,其中QuickSortClass的QuickSort(int[])方法实现了快速排序,BinarySearchClass的BinarySearch (int[], int)方法实现了二分查找。
由于某些原因,开发人员已经找不到该算法库的源代码,无法直接通过复制和粘贴操作来重用其中的代码;而且部分开发人员已经针对ScoreOperation接口(自己开发的接口)编程,如果再要求对该接口进行修改或要求大家直接使用QuickSortClass类和BinarySearchClass类将导致大量代码需要修改。
现使用适配器模式设计一个系统,在不修改已有代码的前提下将类QuickSortClass和类BinarySearchClass的相关方法适配到ScoreOperation接口中。
根据以上要求完成教务系统学生成绩排序查找程序的结构图建模,使用JAVA或C#语言编写控制台应用程序,并能调试运行。
类图







相关文章:
Java设计模式(适配器模式)
定义 将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。 角色 目标抽象类(Target):目标抽象类定义客户所需的接口(在类适配器中,目标抽象类只能是接口)。 适配器类…...
机器学习框架巅峰对决:TensorFlow vs. PyTorch vs. Scikit-Learn实战分析
1.引言 1.1机器学习框架的重要性 在机器学习的黄金时代,框架的选择对于开发高效、可扩展的模型至关重要。合适的框架可以极大地提高开发效率,简化模型的构建和训练过程,并支持大规模的模型部署。因此,了解和选择最合适的机器学习…...
基于STM32的智能窗帘控制系统
目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家居智能窗帘控制办公室窗帘自动调节常见问题及解决方案 常见问题解决方案结论 1. 引言 智能窗帘控制系统能够通过时间、光照强度或远程控制,实现对…...
【算法】普里姆算法解决修路问题
应用场景——修路问题 1.某地有 7 个村庄(A,B,C,D,E,F,G),现在需要修路把 7 个村庄连通 2.各个村庄的距离用边线表示(权),比如 A - …...
Python 之Scikit-learn(二) -- Scikit-learn标准化数据
在机器学习中,数据标准化是一项关键的预处理步骤。标准化(Standardization)是将数据转换为具有均值为0和标准差为1的分布。这样可以确保特征在相同的尺度上,有助于提升某些机器学习算法的性能和稳定性。 Scikit-learn提供了一个简…...
机械学习—零基础学习日志(python编程)
零基础为了学人工智能,正在艰苦的学习 昨天给高等数学的学习按下暂停键,现在开始学习python编程。 我学习的思路是直接去阿里云的AI学习课堂里面学习。 整体感觉,阿里云的AI课堂还是有一些乱,早期课程和新出内容没有更新和归档…...
WEB应用(十三)---RCE
什么是RCE? Remote Command/Code Execute,远程命令或代码执行。通过构造特殊的字符串,将数据提交至Web应用程序,并利用该方式执行外部程序或系统命令实施攻击,类似于SQL注入。 Web应用程序使用了一些可以执行系统命令或…...
【云原生】Service服务暴露详细
Service服务 文章目录 Service服务一、Service介绍1.1、介绍1.2、Kubernetes中的Service 二、Service服务类型2.1、ClusterIP2.2、NodePort2.3、LadBalancer2.4、ExternalName 三、Service玩法3.1、定义Service3.2、端口定义别名3.3、多端口Service 四、Service类型4.1、Cluste…...
实名认证次数限制
在业务层实现实名认证次数限制 这个功能是通过以下步骤实现实名认证的次数限制: 每日失败尝试次数限制:限制用户每天可以尝试失败的次数。失败后的冷却时间:用户在连续失败几次后需要等待一段时间才能再次尝试。成功认证后的限制࿱…...
【如何在Python中使用pathlib模块】
在Python中使用pathlib模块主要涉及创建Path对象,并利用这些对象提供的方法来执行文件系统的各种操作。以下是一些详细的步骤和示例,帮助你了解如何在Python中有效地使用pathlib模块。 1. 导入Path类 首先,从pathlib模块中导入Path类。 fr…...
sqli-labs第一关详细解答
首先判断是否有注入点 发现and 11 和 and 12结果一样,所以应该是字符型注入,需要对单引号做闭合 做闭合后发现报错,提示Limit 0,1,那就说明存在注入点,但是要注释掉后面的limit 0,1 使用--注释掉limit 0,1后ÿ…...
分布式事务一站式解决方案-Seata
分布式事务一站式解决方案- 分布式事务一站式解决方案分布式事务产生背景三个概念Seata下载和安装实际业务模拟演示不加 GlobalTransactional 注解,正常操作下单不加 GlobalTransactional 注解,下单过程出异常或者超时了加 GlobalTransactional 注解&…...
openwrt 使用ftace工具追踪协议栈转发流程
开这四个宏 CONFIG_KERNEL_DYNAMIC_FTRACEy CONFIG_KERNEL_FTRACEy CONFIG_KERNEL_FUNCTION_GRAPH_TRACERy CONFIG_KERNEL_FUNCTION_TRACERy 如果/sys/kernel/debug/tracing没有,可以挂载 mount -t debugfs nodev /sys/kernel/debug 挂载报错: mo…...
ElasticSearch优化实战:打造高性能搜索引擎的秘籍
在当今这个大数据时代,信息的海量增长对搜索技术提出了前所未有的挑战。用户不仅需要快速准确地从数以亿计的数据中找到所需信息,还希望搜索引擎能够提供个性化和智能化的搜索体验。ElasticSearch作为市场上领先的搜索引擎,因其强大的全文搜索…...
【STL】| C++ 栈和队列(详解、容器适配器的初步引入)
目录 前言 总代码 容器适配器的引入 栈 stack 队列 queue 栈和队列用法简介 栈 队列 deque简介(了解即可) 结语 前言 今天我们要讲解的结构是栈和队列 这两个的具体实现相比于前面我们学的string、vector、list都要简单得多(因为容…...
xss漏洞(二,xss靶场搭建以及简单利用)
本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一,环境搭建。 使用工具:PHP study,dvwa靶场。 1,GitHub上下载dvwa到PHP study的WWW文件夹内,并解压。 dvwa下载地址 …...
深度学习--------------Kaggle房价预测
目录 下载和缓存数据集访问和读取数据集总代码 数据预处理训练K折交叉验证模型选择总代码提交你的Kaggle预测提交Kaggle 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests# download传递的参数分别是数据集的名称、缓存文件夹的路径…...
cpio 命令
前言 cpio(Copy In and Out)是一种在类 Unix 操作系统中处理归档文件的多功能工具。与 tar 不同,cpio 有其独特的优势和使用场景,特别是在与其他命令结合使用时。本文将带你了解 cpio 的基础知识、用法及实际示例。 什么是 cpio…...
TreeMap自定义排序
我们都知道TreeMap可以根据key按字典升序排序。但在某些场景下,我们需要自定义排序规则,为了代码优雅一些,我们也希望在stream中groupingBy时自定义排序规则,就可以参考本文的实现。 1. 使用TreeMap默认的排序规则(按…...
我的CSDN 512天创作纪念日-20240807
机缘 在 2023 年 3 月 13 日,我撰写了第一篇技术博客《软考高级-系统分析师-案例分析-系统维护与设计模式》。那一天,我决定将自己的实战项目经验和学习心得记录下来,与更多志同道合的朋友分享。成为一名专业 IT 作者的梦想,促使我…...
Windows环境下Oracle 11g快速部署与优化配置指南
1. Windows下Oracle 11g安装前的准备工作 在开始安装Oracle 11g之前,我们需要做好充分的准备工作。首先,确保你的Windows系统满足最低硬件要求:至少2GB内存(推荐4GB以上)、10GB可用磁盘空间(实际需要根据数…...
告别虚拟机:在Mac/Windows本地用Docker快速拉起StarRocks测试环境
告别虚拟机:在Mac/Windows本地用Docker快速拉起StarRocks测试环境 当我们需要快速验证一个数据库的功能特性时,传统方式往往需要在虚拟机或物理机上经历繁琐的安装配置过程。对于StarRocks这样的分布式分析型数据库,传统部署方式更是需要准备…...
什么是共轭表达式?解决了什么问题?
什么是共轭表达式?解决了什么问题?为什么导数是 1/x? 导数衡量的是“每增加 1 单位的 xxx,y 能增加多少”...
告别DataGridView!用ReoGrid在C#中打造Excel级表格编辑功能(支持粘贴/样式保留)
告别DataGridView!用ReoGrid在C#中打造Excel级表格编辑功能(支持粘贴/样式保留) 在传统C#桌面应用开发中,DataGridView一直是表格数据显示的默认选择。但当我们面对制造业成本核算、财务报表生成等需要处理复杂Excel数据的场景时&…...
BepInEx终极指南:5个实战场景快速掌握Unity游戏插件开发框架
BepInEx终极指南:5个实战场景快速掌握Unity游戏插件开发框架 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx(Bepis Injector Extensible࿰…...
OpenClaw自动化测试:Qwen3-14B驱动的代码审查机器人
OpenClaw自动化测试:Qwen3-14B驱动的代码审查机器人 1. 为什么需要自动化代码审查 去年参与一个开源项目时,我经常在深夜提交代码后收到维护者的评论:"这里有个拼写错误"、"那个变量命名不规范"。这种延迟反馈让我意识…...
终极指南:3分钟上手res-downloader,轻松下载全网视频音频资源
终极指南:3分钟上手res-downloader,轻松下载全网视频音频资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-download…...
如何用快马平台与jdk1.8特性十分钟搭建商品管理系统原型
今天想和大家分享一个快速搭建商品管理系统原型的经验。作为一个经常需要验证业务逻辑的后端开发,我发现用jdk1.8配合InsCode(快马)平台可以十分钟内完成从零到可运行的原型开发,特别适合敏捷开发场景。 为什么选择jdk1.8 企业级开发中jdk1.8仍然是主流选…...
TabNine终极指南:如何利用AI代码补全彻底改变你的开发体验
TabNine终极指南:如何利用AI代码补全彻底改变你的开发体验 【免费下载链接】TabNine AI Code Completions 项目地址: https://gitcode.com/gh_mirrors/ta/TabNine 在当今快节奏的软件开发世界中,效率是每个开发者追求的核心目标。TabNine作为一款…...
Seldon Core 2与Triton推理服务器集成:高性能GPU推理实战指南 [特殊字符]
Seldon Core 2与Triton推理服务器集成:高性能GPU推理实战指南 🚀 【免费下载链接】seldon-core An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models 项目地址: https://gitcode.com/gh_mirr…...
