Java中的适配器设计模式

适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码。

适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比。

在设计面向对象的应用程序时,当我们的客户希望使用特定类型的对象并且我们有一个第三方API提供相同的功能但通过不兼容的接口时,我们可能会感到需要适配器

它也被称为包装器,因为它通过一个新接口包装现有代码,使其与客户端兼容。

术语:

让我们知道在谈论适配器模式时使用的术语:

  • 客户端:要使用第三方库或外部系统的类
  • Adaptee:我们要使用的第三方库或外部系统中的类
  • 目标接口:客户端将使用的所需接口
  • 适配器:此类位于客户端和适配器之间,并实现目标接口

使用适配器模式:

假设我们有一个ShopInventory ,其中维护着一个产品列表。 后来,我们接管了另一家出售杂货的商店库存。 现在,我们要将这些项目添加到ShopInventory中 。 我们这里存在的问题是,尽管GroceryItem只是一种产品,但与Product接口无关。

为了解决这个问题,我们将使用适配器模式。 我们将创建一个GroceryItemAdapter ,它将实现Product接口:

借助适配器,我们现在可以将GroceryItem视为产品,而无需更改第三方代码( GroceryItem )中的任何内容。

Java实现:

首先定义一个Product和一个ShopInventory类:

public interface Product {String getName();double getPrice(); 
}public class ShopInventory {private List<Product> products;public ShopInventory() {this.products = new ArrayList<>();}public void addProduct(Product product) {this.products.add(product);}public void removeProduct(Product product) {this.products.remove(product);}
}

我们刚刚接管的第三方商店拥有GroceryItem

//third-party code
public class GroceryItem {String itemName;int costPerUnit;//constructor, getters and setters
}

由于我们的ShopInventory只保存Product类型的项目,因此我们为新引入的GroceryItem创建一个适配器:

public class GroceryItemAdapter implements Product {private GroceryItem groceryItem;public GroceryItemAdapter(GroceryItem groceryItem) {this.groceryItem = groceryItem;}public String getName() {return groceryItem.getItemName();}public double getPrice() {return groceryItem.getCostPerUnit();    }
}

这样,我们现在可以将我们的常规产品和杂货添加到我们的ShopInventory中:

//code in our main method
ShopInventory inventory = new ShopInventory();//adding regular store products - ones that implement Product interface
inventory.addProduct(new CosmeticProduct("Lavie Handbag", 5000.0));
inventory.addProduct(new FitnessProduct("Yoga SmartFit", 2000.75));//adding GroceryItem to the store using an adapter
GroceryItem groceryItem = new GroceryItem("Wheat Flour", 100);
inventory.addProduct(new GroceryItemAdapter(groceryItem));

结论:

适配器模式可帮助我们连接两个不兼容的接口,以显示相同的业务功能。

使用适配器模式,我们将现有接口转换为客户端代码期望的另一个接口。

翻译自: https://www.javacodegeeks.com/2019/08/adapter-design-pattern-in-java.html

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

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

相关文章

[渝粤教育] 天津市大学软件学院 职熵 参考 资料

教育 -职熵-大学生职业素养与能力提升-章节资料考试资料-天津市大学软件学院【】 随堂测验 1、【判断题】企业用人机制四字是&#xff1a;选育留裁。 A、正确 B、错误 参考资料【 】 第一章章测试 1、【多选题】职熵“五常”仁义礼智信&#xff0c;对应哪些职业能力_____、团队…

[渝粤教育] 天津科技大学 化工开发与创新实验 参考 资料

教育 -化工开发与创新实验-章节资料考试资料-天津科技大学【】 第一章 学术诚信与规范&#xff1a;探索真理的基石单元测验 1、【单选题】没有参与研究&#xff0c;就在学术成果上署名的行为&#xff1a; A、很常见而且是理所当然的 B、我的论文我署谁的名应该都可以 C、违反了…

光纤收发器双模和单模有什么区别?如何区分单模、双模光纤收发器?

光纤收发器是一种将短距离的电信号和长距离的光信号进行传输转换的媒介&#xff0c;由于有些网络环境下短距离的电信号无法覆盖&#xff0c;必须用光纤来延长传输距离&#xff0c;而将铜线升级为光纤的成本又太大&#xff0c;所以光纤收发器的应用越来越广泛。 收发器有单模和…

[渝粤教育] 宁波工程学院 微积分I 参考 资料

教育 -微积分I-章节资料考试资料-宁波工程学院【】 第一周测验(1) 1、【单选题】<img src"http://nos.netease.com/edu-image/9DB250144BA69D695AB03C664C815B3A.jpg?imageView A、 B、 C、 D、 参考资料【 】 2、【单选题】 A、 B、 C、 D、 参考资料【 】 3、【单选…

光纤收发器通过无线路由器如何安装?

光纤收发器一般都是成对使用的&#xff0c;比如运营商&#xff08;电信、移动、联通&#xff09;的光纤收发器发射&#xff0c;用户家里的光纤收发器进行接收。不管怎样&#xff0c;光纤收发器都是成对使用的。那么&#xff0c;如何通过无线路由器安装光纤收发器&#xff1f;接…

外部集成 网页制作_外部服务的集成测试

外部集成 网页制作我们的系统通常依赖于第三方服务&#xff08;它们甚至可能是我们无法控制的公司内部服务&#xff09;。 此类服务包括公开API的社交网络&#xff0c;带有诸如Salesforce&#xff0c;身份验证提供程序之类的API的SaaS或我们系统与之通信但不在产品生命周期内的…

[渝粤教育] 平顶山学院 学前心理学 参考 资料

教育 -学前心理学-章节资料考试资料-平顶山学院【】 第一讲 什么是学前心理学 随堂测试 1、【单选题】幼儿指的是&#xff08; &#xff09; A、3—6岁 B、0—1岁 C、1—3岁 D、7岁 参考资料【 】 2、【单选题】下列哪项不是学前儿童心理学的研究内容之一&#xff1f; A、个体心…

光纤收发器性能级别及价格介绍

光纤收发器的使用原理都是一样的&#xff0c;但根据不同的布线技术、温度、湿度、抗雷性等环境要求&#xff0c;光纤收发器基本可以分成三种级别工业级、电信级和普通网络级。接下来&#xff0c;就由飞畅科技来为大家详细介绍下光纤收发器的性能级别及价格&#xff0c;感兴趣的…

[渝粤教育] 新乡医学院 大学生心理健康教育 参考 资料

教育 -大学生心理健康教育-章节资料考试资料-新乡医学院【】 第一章单元作业 第一章单元测试 1、【单选题】1989年世界卫生组织又一次深化了健康的概念&#xff0c;在其中补充了 A、 参考资料【 】 2、【单选题】大学生心理健康的标准不包括 A、 参考资料【 】 3、【单选题】开…

JDK 13:VM.events已添加到jcmd

CSR&#xff08; 兼容性和规范审查 &#xff09; JDK-8224601 [“提供VM.events诊断命令”]从JDK 13 Early Access Build &#xff03;24 &#xff08;日期为2019/6/6 &#xff09;开始在JDK 13中实现&#xff0c;并通过增强功能JDK- 8224600 [“提供VM.events命令”]。 CSR的“…

[渝粤教育] 昆明理工大学 微机原理与接口技术(付丽霞) 参考 资料

教育 -微机原理与接口技术&#xff08;付丽霞&#xff09;-章节资料考试资料-昆明理工大学【】 第一讲测验 1、【单选题】除了单片机这一名称之外&#xff0c;单片机还可称为( )。 A、CPU B、嵌入式微控制器 C、微处理器 D、微处理机 参考资料【 】 2、【单选题】AT89S51单片机…

光纤收发器选购原则

众所周知&#xff0c;我们在实际采购光纤收发器当中&#xff0c;价格跟性能是一个很重要的衡量因素&#xff0c;特别是一些中小型企业。我们一般认为&#xff0c;几百元的产品足以能够满足一般的企业的需求了&#xff0c;除非是一些特殊的行业&#xff0c;例如电信、军事等。当…

[渝粤教育] 武汉大学 自然科学经典导引 参考 资料

教育 -自然科学经典导引-章节资料考试资料-武汉大学【】 第一讲单元测验 1、【单选题】关于自然派哲学家&#xff0c;以下理解不正确的是 A、他们从经验观察出发&#xff0c;指引人们寻找最本质的东西。 B、他们中大都认为万物本原是物质性的&#xff0c;可感的&#xff0c;也有…

[渝粤教育] 武汉理工大学 测试技术 参考 资料

教育 -测试技术-章节资料考试资料-武汉理工大学【】 第1章 测验 1、【单选题】测试技术的发展趋势&#xff1a; 、 、 、 。 A、智能化、集成化、高灵敏化、数字化 B、智能化、集成化、微小化、数字化 C、集成化、高灵敏化、微小化、数字化 D、智能化、高灵敏化、微小化、数字化…

[渝粤教育] 江苏医药职业学院 急救护理 参考 资料

教育 -急救护理-章节资料考试资料-江苏医药职业学院【】 随堂测验 1、【单选题】在意外事故现场&#xff0c;对受难者诊断是否心跳停止&#xff0c;最迅速有效的方法是 A、听心音 B、观察心尖搏动 C、 测血压 D、摸颈动脉搏动 参考资料【 】 2、【单选题】两人协同对心搏骤停的…

光纤收发器产品的光电介质转换芯片选择性能指标介绍

在以太网光纤收发器设计中&#xff0c;元器件的选择举足轻重&#xff0c;它决定了产品的性能、寿命和成本。光电介质转换芯片&#xff08;OEMC&#xff09;是整个收发器的核心。选择介质转换芯片是以太网光纤收发器设计的第一步&#xff0c;也是非常重要的一步&#xff0c;它的…

jboss ejb_使用JBoss AS 7进行SSL加密的EJB调用

jboss ejb加密客户端和服务器之间的通信可为您的系统提供改进的安全性和隐私保护。 这可能是客户的一项重要要求&#xff0c;尤其是在客户端或服务器需要在不受保护的网络中工作时。 本文向您展示了如何在JBoss AS 7中设置SSL加密的EJB调用。 服务器 在服务器端只需完成两件事…

[渝粤教育] 江西财经大学 中国会计准则(全英文) 参考 资料

教育 -中国会计准则&#xff08;全英文&#xff09;-章节资料考试资料-江西财经大学【】 1.1 QUIZ 1、【单选题】Who issues Chinese accounting standards? A、Ministry of Finance B、IASB C、FASB D、SEC 参考资料【 】 2、【判断题】Accounting standards are the basic p…

反射选择器表达式

Java :: Geci是在单元测试期间运行的代码生成器。 如果生成的代码适合源代码的实际版本&#xff0c;则测试不会失败。 如果需要进行任何修改&#xff0c;则测试会修改源代码并失败。 例如&#xff0c;有一个新的字段需要一个setter和getter&#xff0c;然后访问器生成器将生成新…

光纤收发器不同品牌之间的兼容性互通

目前市面上的光纤收发器品牌跟厂家是愈来愈多&#xff0c;光纤收发器厂家和品牌大部分方案是百兆RTL8306E&#xff0c;IP113C&#xff0c;千兆高通8334&#xff0c;Marvell6122&#xff0c;这几个方案之间的兼容性都不错&#xff0c;可实现互联互通&#xff0c;传输稳定&#x…