【设计模式】第8节:结构型模式之“适配器模式”
一、简介
适配器模式是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。
适配器模式角色:
- 请求者client:调用服务的角色
- 目标Target:定义了Client要使用的功能
- 转换对象Adaptee:需要被适配器转换的对象
- 适配器Adapter:实现转换功能的对象
二、分类
有类适配器和对象适配器两种,前者用继承实现,后者用组合实现。
1. 类适配器

适配器的作用是将Adaptee中的方法都转为Target接口中的方法,而适配器类Adapter继承Adaptee,实现Target接口。
type target interface{} {func1()func2()
}type Adaptee struct {
}func (*Adaptee) fa() {
}func (*Adaptee) fb() {
}type Adapter struct {Adaptee
}func (*Adapter) func1() {fa()
}
2. 对象适配器

跟类适配器类似,唯一的不同在于适配器Adapter对于Adaptee是组合关系,而不是继承。
type target interface{} {func1()func2()
}type Adaptee struct {
}func (*Adaptee) fa() {
}func (*Adaptee) fb() {
}type Adapter struct {adptee Adaptee
}func (*Adapter) func1() {adptee.fa()
}func (*Adapter) func2() {adptee.fb()
}
三、使用场景
1. 类适配器和对象适配器的选择
类适配器和对象适配器选用哪个,主要看Adaptee的接口个数,以及Adaptee和Target的契合程度。
- 如果Adaptee的接口不多,选哪个都可以;
- 如果Adaptee的接口很多
- 如果Adaptee和Target的接口定义大多相同,则推荐使用类适配器,减少开发量。
- 如果Adaptee和Target的接口定义大多不同,则推荐使用对象适配器,代码可以更灵活。
2. 适用场景
- 封装有缺陷的接口设计
- 统一多个类的接口设计
- 替换依赖的外部系统
- 兼容老版本接口
- 适配不同格式的数据
相关文章:
【设计模式】第8节:结构型模式之“适配器模式”
一、简介 适配器模式是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。 适配器模式角色: 请求者client:调用服务的角色目标Target:定义了Client要使用的功…...
Stable Diffusion WebUI扩展openpose-editor如何使用
先上地址: GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webuiOpenpose Editor for AUTOMATIC1111s stable-diffusion-webui - GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webu…...
企业网络带宽使用情况检查技巧
想要提高网络性能的企业通常会考虑限制对占用带宽的应用程序(如社交媒体和视频流应用程序)的访问,但对于那些真正需要获得高效网络的人来说,这还不够,您需要定期跟踪带宽使用情况。 虽然有许多工具可以帮助您检查网络…...
C/C++笔试易错与高频题型图解知识点(三)——数据结构部分(持续更新中)
目录 1. 排序 1.1 冒泡排序的改进 2. 二叉树 2.1 二叉树的性质 3. 栈 & 队列 3.1 循环队列 3.2 链式队列 4. 平衡二叉搜索树——AVL树、红黑树 5 优先级队列(堆) 1. 排序 1.1 冒泡排序的改进 下面的排序方法中,关键字比较次数与记录的初…...
Intel oneAPI笔记--oneAPI简介、SYCL编程简介
oneAPI简介 Intel oneAPI是Intel提供的统一编程模型和软件开发框架。 它旨在简化可充分利用英特尔各种硬件架构(包括 CPU、GPU 和 FPGA)的应用程序的开发 oneAPI一个重要的特性是开放性,支持多种类型的架构和不同的硬件供应商,是…...
Spring IOC - ConfigurationClassPostProcessor源码解析
上文提到Spring在Bean扫描过程中,会手动将5个Processor类注册到beanDefinitionMap中,其中ConfigurationClassPostProcessor就是本文将要讲解的内容,该类会在refresh()方法中通过调用invokeBeanFactoryPosstProcessors(beanFactory)被调用。 5…...
Android OpenGL ES 2.0入门实践
本文既然是入门实践,就先从简单的2D图形开始,首先,参考两篇官方文档搭建个框架,便于写OpenGL ES相关的代码:构建 OpenGL ES 环境、OpenGL ES 2.0 及更高版本中的投影和相机视图。 先上代码,代码效果如下图…...
sql语句性能进阶必须了解的知识点——索引失效分析
在前面的文章中讲解了sql语句的优化策略 sql语句性能进阶必须了解的知识点——sql语句的优化方案-CSDN博客 sql语句的优化重点还有一处,那就是—— 索引!好多sql语句慢的本质原因就是设置的索引失效或者根本没有建立索引!今天我们就来总结一…...
ctfhub技能树web题目全解
Rce 文件包含 靶场环境 重点是这个代码,strpos,格式是这样的strpoc(1,2,3) 1是要搜索的字符串,必须有;2是要查询的字符串,必须有;3是在何处开始查询&#…...
AMD、CMD、UMD是什么?
AMD(Asynchronous Module Definition)、CMD(Common Module Definition)和UMD(Universal Module Definition)是JavaScript模块化规范,用于管理和组织JavaScript代码的模块化加载和依赖管理。 1:AMD(异步模块定义): AMD是由RequireJS提出的模块化规范。它支持异步加载…...
AM@微分方程相关概念@线性微分方程@一阶线性微分方程的通解
文章目录 abstract引言 一般的微分方程常微分方程微分方程的解隐式解通解和特解初始条件初值问题微分方程的积分曲线 线性微分方程一阶线性微分方程一阶齐次和非齐次线性微分方程一阶齐次线性微分方程的解一阶非齐次线性微分方程的解 abstract AM微分方程相关概念线性微分方程…...
基于深度学习的安全帽识别检测系统(python OpenCV yolov5)
收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、研究的内容与方法二、基于深度学习的安全帽识别算法2.1 深度学习2.2 算法流程2.3 目标检测算法2.3.1 Faster R-CNN2.3.2 SSD2.3.3 YOLO v3 三 实验与结果分析3.1 实验数据集3.1.1 实验数据集的构建3.1.2 数据…...
Spring源码分析篇一 @Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有
1. 五种不同场景下 Autowired 的使用 第一种情况 上下文中只有一个同类型的bean 配置类 package org.example.bean;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class FruitCo…...
Goby 漏洞发布|F5 BIG-IP AJP 身份认证绕过漏洞(CVE-2023-46747)
漏洞名称:F5 BIG-IP AJP 身份认证绕过漏洞(CVE-2023-46747) English Name:F5 BIG-IP AJP authentication bypass vulnerability (CVE-2023-46747) CVSS core: 10 影响资产数: 307282 漏洞描述: Cisco …...
Vue中watch侦听器用法
watch 需要侦听特定的数据源,并在单独的回调函数中执行副作用 watch第一个参数监听源 watch第二个参数回调函数cb(newVal,oldVal) watch第三个参数一个options配置项是一个对象{ immediate:true //是否立即调用一次 deep:true //是否开启…...
[算法前沿]--054-大语言模型的学习材料
大语言模型的学习材料 Other Papers If you’re interested in the field of LLM, you may find the above list of milestone papers helpful to explore its history and state-of-the-art. However, each direction of LLM offers a unique set of insights and contribut…...
DWA算法,仿真转为C用于无人机避障
DWA算法,仿真转为C用于无人机避障 链接: 机器人局部避障的动态窗口法(dynamic window approach) 链接: 机器人局部避障的动态窗口法DWA (dynamic window approach)仿真源码详细注释版 链接: 常见路径规划算法代码-Matlab (纯代码篇) …...
现阶段的主流数据库分别是哪几种?
关系型数据库 1. MySQL数据库 MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商…...
“原生感”暴涨311%,这届年轻人不再爱浓妆?丨小红书数据分析
近年来,越来越多美妆博主在社交媒体平台安利“原生感妆容”,即我们所熟知的“伪素颜妆”、“裸妆”、“白开水妆”,显然,追求“原生感”成为当代妆容主流。通过小红书数据分析工具,查看#原生感妆容 话题,近…...
基于深度学习的植物识别算法 - cnn opencv python 计算机竞赛
文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …...
【Python机器学习】零基础掌握SGDOneClassSVM线性分类器
如何高效地识别异常数据点? 在数据分析、金融风控、网络安全等多个领域,识别异常数据点是一个常见但又具有挑战性的问题。传统的方法可能需要复杂的计算和专门的知识背景,但有没有一种更简单、更直观的方式来解决这个问题呢? 假设一个金融公司需要识别可能的欺诈信用卡交…...
Xinference-v1.17.1在Ubuntu上的实战应用:从环境准备到模型推理
Xinference-v1.17.1在Ubuntu上的实战应用:从环境准备到模型推理 1. 引言 Xinference作为一款开源AI模型推理平台,其1.17.1版本在Ubuntu系统上的表现尤为出色。本文将带你从零开始,完成在Ubuntu系统上部署Xinference并运行各类AI模型的完整流…...
中兴光猫终极管理工具:zteOnu工厂模式与Telnet一键开启指南
中兴光猫终极管理工具:zteOnu工厂模式与Telnet一键开启指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu zteOnu是一款专为中兴光猫设备设计的强大管理工具,能…...
基于SpringBoot开发的预约停车系统共享停车位小程序app
在城市化进程加速的今天,汽车保有量以年均数百万辆的速度激增,而停车位建设却始终滞后。据统计,我国一线城市核心区域车位缺口率普遍超过50%,医院、景区、商圈等场景“一位难求”的现象已成为制约城市运转效率的痛点。在此背景下&…...
HWA_03 leetcode874模拟行走机器人
题目map方法的作用解题思路 class Solution:def robotSim(self, commands: List[int], obstacles: List[List[int]]) -> int:#初始化结果result 0#从原点0,0位置开始出发x0y0#机器人前进的方向#初始方向:正北#0表示向北#1表示向东#2表示向南#3表示向西direction0…...
WePush邮件推送完全手册:从基础配置到批量发送的完整流程
WePush邮件推送完全手册:从基础配置到批量发送的完整流程 【免费下载链接】WePush 专注批量推送的小而美的工具,目前支持:模板消息-公众号、模板消息-小程序、微信客服消息、微信企业号/企业微信消息、阿里云短信、阿里大于模板短信 、腾讯云…...
工业级音频响应式分形火焰生成器:从算法到工程实践
1. 项目概述1.1 背景与动机分形火焰(Fractal Flame)是一种基于迭代函数系统(IFS)的生成艺术,能够产生绚丽多彩、无限复杂的图案。传统实现通常只依赖随机性,缺乏与外部世界的交互。音频信号作为丰富的信息源…...
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
目录 一.密密摆放 1.题目讲解 2.代码实现 二.脉冲强度之和 1.题目讲解 2.代码实现 三.25 之和 1.题目讲解 2.代码实现 四.旗帜 1.题目讲解 2.代码实现 五.数列差分 1.题目讲解 2.代码实现 六.树上寻宝 1.题目讲解 2.代码实现 七.翻转硬币 1.题目讲解 2.代…...
避坑指南:Node-RED读取西门子PLC模拟量值,为什么你的DB块数据总是0?(附S7-1200配置全流程)
Node-RED与西门子S7-1200 PLC通信避坑实战:从DB块数据异常到稳定读取的完整解决方案 当工业物联网项目遇到Node-RED与西门子PLC通信时,DB块数据读取为0的问题就像一道无形的墙,让不少开发者陷入调试泥潭。上周深夜,我的工作站屏幕…...
二次元创作神器体验:沉浸式漫画分镜界面,快速产出火影同人作品
二次元创作神器体验:沉浸式漫画分镜界面,快速产出火影同人作品 1. 创作工具概览 「忍者绘卷:通灵之术」是一款专为二次元创作者设计的AI绘画工具,基于Tongyi-MAI Z-Image Turbo模型深度优化。这款工具最大的特色是采用了创新的漫…...
