java适配器模式 (Adapter Pattern)示例代码

适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于系统间接口不兼容的情况下,通过适配器来让它们能够一起工作。下面是一个简单的Java适配器模式示例代码。

目标接口

首先,我们定义了目标接口 Target,这是客户端期望的接口:

public interface Target {void request();
}

适配者类

然后,我们定义了适配者类 Adaptee,它具有不兼容的接口,即客户端无法直接使用的接口:

public class Adaptee {public void specificRequest() {System.out.println("Adaptee's specific request");}
}

适配器类

接下来,我们定义了适配器类 Adapter,它实现了目标接口,并持有适配者类的实例,在 request() 方法中调用了适配者类的方法来实现目标接口:

public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}

客户端代码

最后,我们可以在客户端代码中使用适配器来调用适配者类的方法,实现了与目标接口的兼容:

public class Client {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new Adapter(adaptee);target.request();}
}

示例说明

  • 在这个示例中,Adaptee 类具有一个名为 specificRequest() 的方法,它是客户端无法直接使用的接口。
  • Target 接口定义了客户端期望的接口,它包含了一个名为 request() 的方法。
  • Adapter 类实现了 Target 接口,并持有一个 Adaptee 类的实例,在 request() 方法中调用了 Adaptee 类的 specificRequest() 方法来实现目标接口。
  • 客户端代码创建了一个 Adaptee 类的实例,并通过适配器 Adapter 将其转换成了目标接口 Target 的实例,然后调用了 request() 方法。

通过适配器模式,我们可以在不改变现有代码的情况下,使不兼容的接口能够一起工作,从而提高了代码的复用性和灵活性。

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

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

相关文章

【数据结构】二叉树的功能实现

文章目录 关于二叉树的创建如何创建二叉树实现二叉树的前、中、后序遍历层序遍历 关于二叉树的创建 在笔者的上一篇文章中堆进行了一个详细介绍,而二叉树是以堆为基础进行创建,它与堆的显著不同是 堆像是一个线性结构,堆的结构往往是一个数…

PHP生成二维码+二维码包含logo图片展示

composer require chillerlan/php-qrcode 用到的扩展自己安装(注:只生成二维码只要开gd扩展就行) 仅生成二维码看这个: use chillerlan\QRCode\QRCode;public function QRCode(){$qrcode new QRCode();$url "http://ww…

Beta 分布和 Gamma 分布

0. 摘要 本文主要介绍 B e t a Beta Beta 分布和 G a m m a Gamma Gamma 分布之间的关系, 以及两者的采样方法. 其实, PyTorch、Numpy、Scipy 等一些机器学习包已经实现了对这两种分布的包装, 本文主要目的是理解背后的大致原理. 1. Beta 分布 设 X ∼ B e t a ( α , β…

Flutter 中的 OutlineButton 小部件:全面指南

Flutter 中的 OutlineButton 小部件:全面指南 在Flutter的Material Design组件库中,OutlineButton是一个用于创建带边框的扁平按钮的小部件。这种按钮通常用于次要操作或在需要强调其他按钮的情况下使用。本文将为您提供一个全面的指南,帮助…

介绍下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块

npm(Node Package Manager)模块安装机制是Node.js生态系统中非常重要的一部分,它允许开发者轻松管理和安装Node.js项目的依赖项。下面我将详细介绍npm模块的安装机制,以及为什么输入npm install就可以自动安装对应的模块。 npm模…

金蝶「起舞」,AI进化

能清晰感受到的是,金蝶仍然在不断进化,甚至伴随着AI时代的到来,它的进化信号愈发明显。 这些进化对应的具体动作是,把过去多年的服务模型整合成AI模型,把具体的服务“工艺”整理成流程编排能力,以及从740…

水下哨兵 智能守护——北斗人员落水报警与快速应急响应方案

随着科技的不断发展,人们对于安全的需求也越来越高,尤其是在水域活动中,落水事故时有发生,给人们的生命和财产安全带来了很大威胁。为了更好地保障水域活动者的安全,北斗短报文技术被广泛应用于落水报警系统中&#xf…

Python 中的 NumPy:数值计算基础

NumPy(Numerical Python)是一个用于科学计算的基础包。它提供了支持高效数组和矩阵操作的强大功能,同时还提供了大量的数学函数库。NumPy 是许多数据科学和机器学习库(如 Pandas、Scikit-Learn 和 TensorFlow)的基础&a…

不平衡数据研究:分配权重 合并2个loader

分配权重(基于实例分配,基于类分配) import numpy as np import torch from torch.utils.data import DataLoader, WeightedRandomSampler, Dataset# Mock dataset class class MockDataset(Dataset):def __init__(self, data, targets):sel…

玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制

一、简介 “碰一碰”设备控制,依托NFC短距通信协议,通过碰一碰的交互方式,将OpenAtom OpenHarmony(简称“OpenHarmony”)标准系统设备和全场景设备连接起来,解决了应用与设备之间接续慢、传输难的问题&…

什么是DDoS流量清洗?

随着互联网的飞速发展,网络安全问题日益凸显,其中分布式拒绝服务(DDoS)攻击尤为引人关注。为了有效应对这一威胁,流量清洗服务应运而生,成为网络安全领域的一项重要技术。 流量清洗服务是一种专门针对DDoS…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示,PHP 的流行度降至了历史最低,排在第 17 名,同时,在年度 Stack Overflow 开发者调查报告中,PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

WiFi蓝牙模块开发配置过程中需要注意的细节

在很多产品的应用场景中,WIFI网络会给我们提供很多便捷,MCU开发中大多使用串口WIFI蓝牙模块来实现产品接入WIFI网络中。   具体的使用模型如下图所示:整个系统涉及到WIFI网络、手机、服务器平台以及我们设计的产品,一个完整的生…

Docker技术搭建Grafana监控平台

centos7虚拟机和docker的安装:可以参考之前的博文 CPU、mysql-exporter、docker监控模板:百度网盘 提取码:0000 先查看服务器时间是否和当前时间一致,如果不一致,查看对应设置:centos7时间同步博文 一、…

拆分盘投资深度解析:投资逻辑、风险探讨与投资建议

随着互联网技术的飞速发展,金融领域也迎来了诸多创新。其中,拆分盘作为一种新型投资模式,以其独特的“只涨不跌”机制,吸引了众多投资者的目光。本文将深入探讨拆分盘的投资逻辑,并通过一个实际案例进行解析&#xff0…

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 得到一个attachment.zip文件 解题思路: 1、解压attachment.zip,得到222.zip文件。尝试解压需要密码,使用Ziperello爆破密码…

Elementui里使用el-date-picker来选择多个日期(日期数量不超过31个)

<el-date-picker style"width:350px;"v-model"selectedDates" type"dates" :picker-options"pickerOptionsMul" placeholder"选择日期"> </el-date-picker>data(){return{selectedDates: [],pickerOptionsMul: …

CATIA入门操作——萌新宝宝遇到的奇奇怪怪的问题解决,持续更新中。。。

目录 引出发生肾么事了&#xff1f;&#xff1f;鼠标中键旋转不了解决&#xff1a;特征树不显示参数关系 我的窗口去哪了&#xff1f;插曲&#xff1a;草图工具的调出插曲&#xff1a;颜色工具栏显示 弹窗警告警告&#xff1a;创建约束是临时的 操作技巧技巧&#xff1a;快速隐…

unity 常用工具和代码

GitHub - edcasillas/unity-missing-references-finder: A tool to find missing references in Unity ASE MagicaCloth PostProcessing GPU culling AmplifyColor Bakery

Unity功能——设置图片渐显渐掩

两种方式&#xff1a; 本质都是 根据时间修改图片透明度 达到动态显示或掩藏图片的效果 1、监测图片透明度&#xff0c;根据图片透明度值来显示或掩藏图片&#xff1b; 2、监测时间&#xff0c;根据时间长短来显示或掩藏图片&#xff1b; 可根据项目需求进行选择和细节修改。 …