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

java设计模式适配器模式

java设计模式适配器模式_Java中的适配器设计模式相关推荐

  1. java命令模式_Java中的命令设计模式

    java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...

  2. java 设计模式 示例_Java中的状态设计模式–示例教程

    java 设计模式 示例 状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件 ...

  3. java 设计模式 示例_Java中的访问者设计模式–示例教程

    java 设计模式 示例 访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车 ...

  4. java 设计模式 示例_Java中的策略设计模式-示例教程

    java 设计模式 示例 策略模式是行为设计模式之一 . 当我们对一个特定的任务有多种算法并且客户决定在运行时使用的实际实现时,将使用策略模式. 策略模式也称为策略模式 . 我们定义了多种算法,并让客 ...

  5. java memento_memento模式_Java中的Memento设计模式-示例教程

    memento模式 记忆模式是行为设计模式之一 . 当我们要保存对象的状态以便以后可以恢复时,可以使用Memento设计模式. 使用Memento模式以这种方式实现该目的,即无法在对象外部访问对象的已 ...

  6. java 观察者模式示例_Java中的观察者设计模式-示例教程

    java 观察者模式示例 观察者模式是行为设计模式之一 . 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用. 在观察者模式中,监视另一个对象状态的对象称为Observer ...

  7. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  8. Java中的适配器设计模式

    适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计面向对象的应用程序时,当我们的 ...

  9. java设计模式适配器模式_Java解释器设计模式

    java设计模式适配器模式 Interpreter design pattern is one of the behavioral design pattern. Interpreter patter ...

最新文章

  1. linux rpm 安装 卸载软件
  2. 互联网运营期产品评审杂思,互联网营销
  3. 教你9招最有效防电脑辐射方法
  4. 深入理解javascript
  5. Python 命令行传参
  6. 生信分析和统计作图资源推荐
  7. 快速上手Google C++ 测试框架googletest
  8. 【java】java String 源码
  9. 用 pre-commit hook 解决 Python 项目编码规范
  10. Entity Framework第三篇IQueryable和list本地集合
  11. 模电笔记之共射放大电路
  12. android wear表盘商店,手里的 Android Wear 太没个性?你该试试这 4 款表盘
  13. SPARC Learn Note
  14. 向量索引算法HNSW和NSG的比较
  15. 《认文识字•简述》【小结】
  16. RoboMaster视觉教程(5)目标位置解算(通过像素点获取转角)
  17. tensorflow的GPU加速计算
  18. Android窗口Window的创建(悬浮窗)
  19. Dubbo解析及原理浅析
  20. JavaMail| Apache Commons Email介绍

热门文章

  1. HDU - 4608 I-number
  2. H - Tunnel Warfare HDU - 1540
  3. hdu 1576 A/B
  4. 【每日一题】4月9日题目精讲 Running Median
  5. 201912-3 化学方程式
  6. [AtCoder Regular Contest 123] 题解
  7. 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对
  8. [数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM
  9. CF1406E:Deleting Numbers(构造、根号分块)
  10. AT3950-[AGC022E]Median Replace【贪心,dp】