百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

Java微服务-设计模式系列全套文章-适配器模式(Adapter Pattern)

yuyutoo 2025-06-23 23:15 3 浏览 0 评论

模式动机

适配器模式(AdapterPattern)是一种使用频率非常高的结构型模式,如果在系统中存在不兼容的接口,可以通过引入一个适配器来使得原本因为接口不兼容而不能一起工作的两个类可以协同工作。适配器模式中适配器的作用与现实生活中存在的电源适配器、网络适配器等作用相同。在引入适配器后,无需对原有系统进行任何修改,且更换适配器或者增加新的适配器都非常方便,系统具有较好的灵活性和扩展性。适配器模式可看做是一种对现有系统进行补救以及对现有类进行重用的模式。

  • 通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。

如现在目标类中定义的方法名为method1( ),客户端已经针对该方法进行编程,而现有类中的方法method2( )恰好满足客户端的要求,如何在不修改原有目标类和客户端代码的基础上确保能够使用到现有类中的method2( )方法,就是适配器模式所要解决的问题。

  • 在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。
  • 如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。
  • 在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这个包装类指的就是适配器 (Adaptor),它所包装的对象就是适配者(Adaptee),即被适配的类。
  • 适配器提供客户类需要的接口,适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。

也就是说,当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于接口不兼容而不能交互的类可以一起工作,这就是适配器模式的模式动机。

模式定义

  • 适配器模式也称为包装器(Wrapper)模式。
  • 适配器模式(AdapterPattern):将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。
  • 它既可以作为类结构型模式,也可以作为对象结构型模式。
  • 在适配器模式的定义中所提及的接口是指广义的接口,它可以表示成一个方法或者方法的集合。

模式结构


类适配器

对象适配器



模式分析

  • 适配器模式可以将一个类的接口和另一个类的接口匹配起来,使用的前提是不能或不想修改原来的适配者接口和抽象目标类接口。如向第三方购买了一些类、控件,如果没有源代码,这时使用适配器模式可以统一对象访问接口。
  • 适配器模式更多的是强调对代码的组织,而不是功能的实现。
  • 类适配器模式违背了合成复用原则。类适配器是客户类有一个接口规范的情况下可用,反之不可用。
  • 适配者类无法继承时,只能用对象适配器。

  • 模式优点将目标类和适配者类解耦增加了类的透明性和复用性,提高了适配者的复用性灵活性和扩展性非常好,更换(增加)适配器,符合开闭原则。类适配器模式:由于继承关系,置换一些适配者的方法很方便对象适配器模式:可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类
  • 模式缺点类适配器模式
    (1) 一次最多只能适配一个适配者类,不能同时适配多个适配者
    (2) 适配者类不能为最终类(final)
    (3) 目标抽象类只能为接口,不能为类对象适配器模式
    在适配器中置换适配者类的某些方法比较麻烦
  • 使用情形系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作

相关推荐

Java 代理模式详解(java代理类应用场景)

1.代理模式代理模式是一种比较好理解的设计模式。简单来说就是我们使用代理对象来代替对真实对象(realobject)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象...

深入解析Java工厂模式及其应用场景

Java工厂模式(FactoryPattern)是一种创建型设计模式,它提供了一种创建对象的最佳实践,这种模式提供了一种抽象工厂,通过使用工厂方法来创建对象。工厂方法将对象的创建推迟到子类中,这样就...

java之数据格式化(java中格式化快捷键)

数据格式化概述1、对属性对象的输入/输出进行格式化,从其本质上讲依然属于“类型转换”的范畴。...

Java之程序中的套路(设计模式的介绍)

前言本文主要是给大家简单地介绍一下设计模式的概念,文中会使用通俗易懂的案例,使你更好地学习本章知识点并理解原理,做到有道无术一.什么是设计模式首先我们得知道什么是设计模式。所谓的...

java文本对比工具源码5(java 文本对比)

/***Locatethebestinstanceof'pattern'in'text'near'...

Java微服务-设计模式系列全套文章-适配器模式(Adapter Pattern)

模式动机适配器模式(AdapterPattern)是一种使用频率非常高的结构型模式,如果在系统中存在不兼容的接口,可以通过引入一个适配器来使得原本因为接口不兼容而不能一起工作的两个类可以协同工作。适配...

Java 20 发布,新特性一览:Amber、Loom 和 Panama 项目

作者|MichaelRedlich译者|张卫滨...

Java语法入门004(java语法合集)

上篇是java语法入门003,继续学习Java[1]。...

Java8优雅编码实战:10个技巧让你的代码焕然一新

引言:为什么你的Java代码还不够优雅?“代码质量直接决定开发效率与系统稳定性。据Gartner统计,60%的线上故障源于低级编码错误。本文基于10万+行生产代码优化经验,提炼Java8的10大核心...

Java中常见的设计模式汇总?(java三种常用设计模式和实例)

设计模式是一套经过验证的设计方案和最佳实践,这些经验和方案主要就是用来解决软件设计过程中一些特定的问题。设计模式并不是代码本身,而是一种用来解决某种问题的抽象的解决方案,也就是说设计模式是在不同的语言...

Java字符串拼接3大隐藏陷阱!你的代码为何越优化越慢-附提速代码

导语:“某电商平台因一行字符串拼接代码,每秒多消耗1GB内存!本文通过性能压测对比+字节码反编译,揭秘看似简单的字符串操作如何拖垮你的系统。文末附性能检测工具+优化模板,点击关注领取实战方案!”...

JDK21新特性:Pattern Matching for switch

PatternMatchingforswitchJEP441:PatternMatchingforswitch...

java设计模式-行为型:观察者、责任链、备忘录、命令、状态

责任链模式(ChainofResponsibilityPattern)是行为型设计模式的一种。在责任链模式中,多个处理器都有机会处理请求,但是每个处理器都决定它是否可以处理该请求以及它是否应该将...

Java设计模式之外观模式(外观模式类图)

一、外观模式介绍1.1外观模式定义外观模式(FacadePattern),也叫门面模式,外观模式的原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别的接口,使子系统更易于使用...

java文本对比工具源码1(java快速对比数据)

/**DiffMatchandPatch*Copyright2018Thediff-match-patchAuthors....

取消回复欢迎 发表评论: