什么是适配器模式?

适配器模式(Adapter):直观理解就是使原来不能一起相互工作(接口不兼容)的两个功能通过Adapter兼容在一起。

类适配器和对象适配器

类适配器

Adapter 类继承Adaptee (被适配类),同时实现Target 接口(因为 Java 不支持多继承,所以只能通过接口的方法来实现多继承),在 Client 类中我们可以根据需要选择并创建任一种符合需求的子类,来实现具体功能。

对象适配器

不使用多继承或继承的方式,而是使用直接关联,或者称为委托的方式。

区别

类适配器的重点在于类,是通过构造一个继承Adaptee类来实现适配器的功能;
对象适配器的重点在于对象,是通过在直接包含Adaptee类来实现的,当需要调用特殊功能的时候直接使用Adapter中包含的那个Adaptee对象来调用特殊功能的方法即可。

Demo

类适配器

// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
class Adaptee {public void specificRequest() {System.out.println("被适配类 具有特殊功能...");}
}// 目标接口,或称为标准接口
interface Target {public void request();
}// 具体目标类,只提供普通功能
class ConcreteTarget implements Target {public void request() {System.out.println("普通类 具有普通功能...");}
}// 适配器类,继承了被适配类,同时实现标准接口
class Adapter extends Adaptee implements Target{public void request() {super.specificRequest();}
}// 测试类
public class Client {public static void main(String[] args) {// 使用普通功能类Target concreteTarget = new ConcreteTarget();//实例化一个普通类concreteTarget.request();// 使用特殊功能类,即适配类Target adapter = new Adapter();adapter.request();}
}

测试结果:
普通类 具有普通功能…
被适配类 具有特殊功能…

对象适配器

// 适配器类,直接关联被适配类,同时实现标准接口
class Adapter implements Target{// 直接关联被适配类private Adaptee adaptee;// 可以通过构造函数传入具体需要适配的被适配类对象public Adapter (Adaptee adaptee) {this.adaptee = adaptee;}public void request() {// 这里是使用委托的方式完成特殊功能this.adaptee.specificRequest();}
}// 测试类
public class Client {public static void main(String[] args) {// 使用普通功能类Target concreteTarget = new ConcreteTarget();concreteTarget.request();// 使用特殊功能类,即适配类,// 需要先创建一个被适配类的对象作为参数Target adapter = new Adapter(new Adaptee());adapter.request();}
}

测试结果:
普通类 具有普通功能…
被适配类 具有特殊功能…

适配器模式之类适配器与对象适配器的区别及代码实现相关推荐

  1. 【设计模式】适配器模式 ( 类适配器代码模板 | 对象适配器代码模板 | 适配器模式示例 )

    文章目录 I . 适配器模式 ( 类适配器 ) 代码模板 II . 适配器模式 ( 对象适配器 ) 代码模板 III . 适配器模式 代码示例 I . 适配器模式 ( 类适配器 ) 代码模板 1 . ...

  2. 适配器模式(类适配器,对象适配器,接口适配器)

    现实生活中的适配器例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器) ,这样就可以使用了. 基本介绍 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一 ...

  3. 设计模式--适配器模式 (类适配器和对象适配器)

    适配器模式很常用的:商城中的例子比如快递发货,那么多种快递公司:可能每个快递公司的接口对接都不一样都要适配:比如各种框架中的类似以下思想的代码,都是为了适配. public function beha ...

  4. C++设计模式——适配器模式(对象适配器、类适配器)

    http://blog.jobbole.com/109381/?winzoom=1 前言 现在的笔记本都只存在USB接口,用来口,电脑上存在的是USB接口,两者如何通信呢?可以使用USB转串口线连接电 ...

  5. 【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )

    文章目录 I . 适配器模式概念 II . 适配器模式 适用场景 III . 适配器模式 优缺点 IV . 适配器模式 与 外观模式对比 V . 适配器模式 相关角色 ( 重点 ) VI . 适配器模 ...

  6. 双向适配器 java_类适配器,双向适配器

    不兼容结构的协调--适配器模式(三) 类适配器 除了对象适配器模式之外,适配器模式还有一种形式,那就是类适配器模式,类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不同,对象适配器模 ...

  7. 适配器模式之对象适配器

    问题导入:比如有A型螺母和B型螺母,那么用户可以再A型螺母上直接使用按着A型螺母生产的A型螺丝,同样也可以在B型螺母上直接使用按着B型 螺母标准生产的B型螺丝.但是由于A型螺母和B型螺母的标准不一样, ...

  8. 适配器模式(对象适配器)

    适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的两种形式 类适配器采用 "多继承" 的 ...

  9. PHP设计模式:工厂(静态方法里调用newobj的方法)单例(三私一公newself)注册树(使用静态变量数组存取对象)适配器(主体建立接口适配器丰富方法)

    工厂:使用工厂类的静态方法新建需要的对象 然后在外面直接调用静态方法新建对象 <?php//要创建对象实例的类 class MyObject{} //工厂类 class MyFactory{pu ...

最新文章

  1. docker 安装oracle_阿里云使用Docker搭建Hadoop集群
  2. maven java 配置文件路径_Maven 的配置文件路径读取
  3. python报错 TypeError: string indices must be integers
  4. 用php程序能消除水印吗,php——水印
  5. Unity计划放弃支持部分图形特性
  6. 正式发布! .NET开发控件集ComponentOne 新版本加入Blazor UI
  7. 把自定义类实例存储到LSO
  8. dell服务器错误代码
  9. 工业基础类IFC—EXPRESS语言
  10. 《深入浅出MFC》系列之消息映射(一)
  11. maven命令打jar包
  12. C语言中关于二级指针的笔试题
  13. 专升本C语言必刷编程题
  14. 寒霜朋克计算机丢失,Frostpunk寒霜朋克冰汽时代已停止工作修复补丁(Windows6.1-KB2670838-x64)...
  15. 使用HTML代码完成效果图,完成www.163.com账号注册页面(不要求做css样式,原生的HTML就好)
  16. c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt
  17. Transaction silently rolled back because it has been marked as rollback-only Spring事务嵌套问题
  18. gps android时钟同步,通过GPS时间同步Android设备?
  19. 双目立体视觉:三(空间直线坐标,立体图像校正)
  20. 规则网络上的演化博弈

热门文章

  1. 全省计算机等级考试中级和2级,计算机中级考试和计算机2级考试有什么区别?
  2. CAD制图软件中如何使用块遮蔽部分区域?
  3. 使用OpenGL挑战抖音蓝线特效
  4. 山西项目转让为赴汶川救灾 我为何躺着也中枪?
  5. java math.log10_Java Math log10() 使用方法及示例
  6. 数三角形 (组合数学+分类讨论)
  7. i5 11320h和i5 1135g7性能差距 i511320h和酷睿i51135g7区别
  8. 机器学习眼中的《人民的名义》
  9. opencv支持多种流行视频格式文件的读取
  10. Scrapy 爬取80s电影网高评分电影详细信息(Scrapy)