设计模式-结构型模式-适配器模式

news/发布时间2024/5/15 4:58:06

0 引言

结构型模式(Structural Pattern)关注如何将现有类或对象组织在一起形成更加强大的结构。

1  适配器模式

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

//首先,我们定义一个接口Target,这是客户端期望的接口:
public interface Target {void request();
}//然后,我们有一个类Adaptee,它的接口与Target接口不兼容:
public class Adaptee {public void specificRequest() {System.out.println("Called specificRequest()");}
}
接下来,我们创建一个适配器Adapter,它实现了Target接口,并包含一个Adaptee对象。在Adapter的request()方法中,我们调用Adaptee的specificRequest()方法,从而实现了对Adaptee接口的包装:
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();//TODO 做数据转换,拿到adptee的数据,转换为client需要的}
}最后,我们在客户端代码中使用适配器模式:
public class Client {public static void main(String[] args) {Target target = new Adapter(new Adaptee());target.request();}
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)

文章目录 1. 介绍2. 实例使用2.1 登录界面2.2 对比两次密码是否相同2.3 通过按钮显示当前输入的密码(并对2.2进行优化)2.4 结语 3. 正则表达式3.1 QRegExp3.2 验证输入内容 4. 资源代码 1. 介绍 关于 QLineEdit 的详细介绍,可以去查阅官方文…

Python及Pycharm专业版下载安装教程(Python 3.11版)附JetBrains学生认证教程

目录 一、Python下载及安装1、Python下载2、Python安装3、验证是否安装成功 二、PyCharm下载及安装1、PyCharm下载2、PyCharm安装3、激活PyCharm 三、JetBrains学生认证 本篇主要介绍Python和PyCharm专业版的下载及安装方式,以及通过两种方式进行JetBrains学生认证。…

深度学习手写字符识别:推理过程

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客,网上也有很多教程,很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

【Flink精讲】Flink性能调优:内存调优

内存调优 内存模型 JVM 特定内存 JVM 本身使用的内存,包含 JVM 的 metaspace 和 over-head 1) JVM metaspace: JVM 元空间 taskmanager.memory.jvm-metaspace.size,默认 256mb 2) JVM over-head 执行开销&#xff1…

蓝牙物联网智能硬件-蓝牙网关

随着物联网技术的不断发展,智能硬件设备已经成为了我们生活中不可或缺的一部分。而在这些智能硬件设备中,蓝牙物联网智能硬件设备凭借其便捷性、高效性和低成本等优势,逐渐成为了市场上的主流。其中,蓝牙网关作为蓝牙物联网智能硬…

微信小程序-场景功能-开发文档学习笔记

界面常见的交互反馈 查看更多学习笔记:GitHub:LoveEmiliaForever 微信小程序开发指南 微信小程序开发文档 用户和小程序上进行交互的时候,某些操作可能比较耗时,我们应该予以及时的反馈以舒缓用户等待的不良情绪(良好…

OJAC近屿智能张立赛博士揭秘GPT Store:技术创新、商业模式与未来趋势

> - [Look!👀我们的大模型商业化落地产品](https://www.airecruitas.com/aigc) >- 📖更多AI资讯请👉🏾[关注](https://mp.weixin.qq.com/s/85qwuIydaaydMQz2g0rgMA) >- [Free三天集训营助教在线为您火热答疑…

张宇2025基础三十讲高等数学笔记(数二)

本次主要是根据书课包视频的进程,第1讲的01和02,分为基础知识和书上的例题加上经典1000题对应的相关的知识点 1.基础知识 1)函数 2)反函数 3)复合函数 2.书上例题1000题 1)函数 2)反函数 3&a…

蓝桥杯备战刷题(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…

【Android12】Monkey压力测试源码执行流程分析

Monkey压力测试源码执行流程分析 Monkey是Android提供的用于应用程序自动化测试、压力测试的测试工具。 其源码路径(Android12)位于 /development/cmds/monkey/部署形式为Java Binary # development/cmds/monkey/Android.bp // Copyright 2008 The Android Open Source Proj…

数据安全策略

当您在第一线担负着确保公司的信息和系统尽可能免受风险的关键职责时&#xff0c;您的数据安全策略需要复杂且多层次。威胁可能有多种形式&#xff1a;恶意软件、黑客攻击、财务或信息盗窃、破坏、间谍活动&#xff0c;甚至是您信任的员工故意或无意的活动造成的。因此&#xf…

C++从入门到精通 第十七章(终极案例)

写在前面&#xff1a; 本系列专栏主要介绍C的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程&#xff0c;笔者的原创部分主要在示例代码的注释部分。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C教材&#xff08;比…

leetcode hot100 买卖股票最佳时机3

本题中&#xff0c;依旧可以采用动态规划来进行解决&#xff0c;之前的两个题我们都是用二维数组dp[i][2]来表示的&#xff0c;其中i表示第i天&#xff0c;2表示长度为2&#xff0c;其中0表示不持有&#xff0c;1表示持有。 本题中&#xff0c;说至多完成两笔交易&#xff0c;也…

Oracle conn / as sysdba遇到ORA-01031: insufficient privileges错误

背景 oracle 突然挂了&#xff0c;处于锁定状态&#xff0c;然后打算重新启动一下子。 遂 sqlplus /nolog conn / as sysdba 然后就出现了以下错误。。 ORA-01031: insufficient privileges 1.查了一圈&#xff0c;有说是 计算机 》 管理》本地用户和组》组》ORA_DBA&am…

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…

Python中json模块介绍及学习

简介 json模块是Python标准库中的一个用于处理JSON数据的模块&#xff0c;它提供了一组方法来进行 JSON 数据的解析和生成。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;常用于数据传输和配置文件。 下面是json模块的一些常…

Phind-70B-运行速度提高4倍的同时,缩小了与GPT-4 Turbo在代码质量上的差距

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

智慧城市系统的开发流程

智慧城市是城市地区使用不同类型的电子方法和传感器来收集数据。从这些数据中获得的见解可用于有效地管理资产、资源和服务作为回报&#xff0c;这些数据将用于改善整个城市的运营。智慧城市系统的开发流程涉及多个阶段和步骤&#xff0c;以下是一个一般性的开发流程&#xff0…

第十八章 Redis的使用

文章目录 1. Redis安装2. Redis的使用命令3. python使用redis 1. Redis安装 链接&#xff1a;https://pan.baidu.com/s/1EIGLFjDRxWyy1bU9Hwr_dw?pwdoloh 提取码&#xff1a;oloh 添加环境变量 Redis 启动 在命令行输入&#xff1a;redis-server 命令 设置redis数据库的…

Angular升级后运行编译变慢?如何解决?

公司的Angular项目升级后&#xff0c;使用体验感十分不好&#xff0c;运行、编译的时间明显增长&#xff0c;工作效率是十分低下&#xff0c;但奈何公司的大佬们都有自己的事情要忙&#xff0c;结识的大佬也不够多&#xff0c;只能靠自己找度娘了。但是&#xff0c;哎&#xff…
推荐文章