适配器模式定义:

把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器的使用场景:

1、系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容
2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3、需要一个统一的输出接口,而输入端的类型不可预知。

总结:输入不可预知,但是输出是规定好的。
比如:
不管输入的是多少伏的电压,输出的必须是5V。
不管用户的item布局样式是什么,listview使用的item都是view类型。

代码示例:
系统只提供给我们苹果汁,而我们需要的是加了糖的苹果汁,所以无法直接使用系统的原料,这就是接口不兼容,此时我们就需要用适配器来做一个接口的转换。把苹果汁转换成加了糖的苹果汁。

1、类适配器模式(不够灵活,仅做介绍,不建议使用)

/*** 系统提供给我们的苹果汁*/
public class AppleJuice {public String getAppleJuice() {return "苹果汁";}public void doSomething() {//系统制作苹果汁的其它神奇操作}
}
/*** 使用类适配器模式需要继承被适配对象*/
public class JuiceAdapter extends AppleJuice {@Overridepublic String getAppleJuice() {//经过一系列复杂的惨无人道的工序//我们给苹果汁加上了糖return "加上了糖的" + super.getAppleJuice();}@Overridepublic void doSomething() {super.doSomething();}}

我们用JuiceAdapter继承了AppleJuice,并返回了经过加工后符合输出要求的加了糖的苹果汁。
执行代码:

                JuiceAdapter adapter = new JuiceAdapter();String juice = adapter.getAppleJuice();Log.i("LHD", "给我一杯" + juice);

输出结果:

是不是看起来很简单?是的,适配器模式的本质就是对接口的转换。
接下来我们看看对象适配器模式。

2、对象适配器模式
/*** 苹果汁接口*/
public interface FruitJuice {String getFruitJuice();
}
/*** 系统提供给我们的苹果汁*/
public class AppleJuice {public String getAppleJuice() {return "苹果汁";}public void doSomething() {//系统制作苹果汁的其它神奇操作}
}
/*** 对象适配器模式*/
public class NewFruitJuiceAdapter implements FruitJuice {AppleJuice appleJuice;public NewFruitJuiceAdapter(AppleJuice appleJuice) {this.appleJuice = appleJuice;}@Overridepublic String getFruitJuice() {String juice = appleJuice.getAppleJuice();//经过一系列逆天的操作//得到一杯加了糖的苹果汁return "加了糖的" + juice;}}

执行代码:

AppleJuice appleJuice = new AppleJuice();
NewFruitJuiceAdapter newFruitJuiceAdapter = new NewFruitJuiceAdapter(appleJuice);
String newJuice = newFruitJuiceAdapter.getFruitJuice();
Log.i("LHD", "给我一杯" + newJuice);

输出:

可以看到我们在适配器内部持有了一个系统提供的苹果汁对象的引用,然后实现了FruitJuice接口,并在getFruitJuice方法中返回了需要输出的苹果汁。

所以可以看到对象适配器模式就是在适配器内部持有输入接口的引用,经过一系列变化,把输入的接口转换成需要的目标接口。

这种实现方式需要将被是配的对象传入到adapter中,使用组合的方式实现接口的兼容,这种方式比类适配器更加灵活,它的另一个好处是被适配对象中的方法不会暴露出来,而类适配器由于继承了被适配的对象,因此,被适配对象类的函数在adaper中也含有,这就会让adapter类出现一些奇怪的接口,比如你可以直接调用doSomething方法,会更难维护,也会让用户的使用成本变高。

适配器模式的典型应用就是Listview,RecyclerView的Adapter啦,大家可自行阅读源码,此处不再赘述。

以上就是适配器模式的简单介绍啦! (#^ . ^#)

java常用设计模式11—适配器模式相关推荐

  1. 初学Java常用设计模式之——原型模式

    声明:转载请附上原文链接 提示:标题序号从3开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--工厂模式 序号从2开始. 标题后面之所以加上了解,是因为相对 ...

  2. 初学Java常用设计模式之——工厂模式

    声明:转载请附上原文链接 提示:标题序号从2开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--单例模式 序号从1开始 2. 工厂模式(常用) ⼯⼚模式介绍 ...

  3. 初学Java常用设计模式之——装饰器模式

    声明:转载请附上原文链接 提示:标题序号从8开始,是照应不同设计模式笔记发布的顺序而定的,比如,上一篇文章 初学Java常用设计模式之--桥接模式和组合模式 序号从7开始. 8. 装饰器设计模式(重点 ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. java常用设计模式文章收集

    java常用设计模式文章收集 java设计模式--接口模式 java设计模式--抽象工厂模式 java设计模式--工厂模式 Java设计模式--迭代器模式 Java设计模式--原型模式 JAVA设计模 ...

  6. Java常用设计模式————适配器模式

    引言 由于无法直接使用某个类中的方法而采取的一种中间类转换的策略.将一个类的接口转换成另一个接口,让原本接口不兼容的类可以兼容. 适配器模式可以分为三种:类适配器.对象适配器.接口适配器.它们之间的区 ...

  7. Java常用设计模式————工厂模式

    简介: 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,又称多态工厂模式.虚拟构造器模式.属于创建型模式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通 ...

  8. java常用设计模式 看了她,改变你的一生~~~

    设计模式: 一个程序员对设计模式的理解: "不懂"为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精 ...

  9. 初学Java常用设计模式之——单例模式

    0. 常⻅的三⼤设计模式分类 创建型模式:提供了⼀种在创建对象的同时隐藏创建逻辑的⽅式,使 得程序在判断针对某个给定实例需要创建哪些对象时更 加灵活,比如: 常用4个:⼯⼚模式.抽象⼯⼚模式.单例模式 ...

最新文章

  1. Ajax提交数据判断员工编号是否存在,及自动填充与员工编号所对应的员工姓名。...
  2. 关闭selinux服务
  3. 蓝桥杯 BASIC-14 基础练习 时间转换
  4. 【CNN】94页论文综述卷积神经网络:从基础技术到研究前景
  5. matlab如何改变数据类型,matlab数据类型转换实用案例
  6. DBLE分库分表示例
  7. 蚂蚁呀嘿 App,七天就下架了!
  8. 德州大学达拉斯分校计算机科学,德克萨斯大学达拉斯分校排名
  9. C语言数字图像处理---2.5图像频域滤波
  10. Win32_VideoController 显卡 参数说明
  11. H5前端性能测试点及优化方法
  12. windwos服务器网站504,打开网站出现504 gateway time-out的原因及解决方法
  13. 量子计算机的研究进展,量子计算原理及研究进展.pdf
  14. 消除SDK更新时的“https://dl-ssl.google.com refused”错误
  15. 写小论文之引言写什么?
  16. Java 调用 Shell 命令
  17. 如何判断一个数是小数(面试题)
  18. jemter web端录制
  19. INSTALL_FAILED_ALREADY_EXISTS 应用权限冲突
  20. 特征工程二(多重共线性)

热门文章

  1. Spring security5.5.7出现Encoded password does not look like BCrypt异常
  2. 深度学习论文写作框架
  3. Java爬去教务系统后怎么发布_java实现-强智教务系统API文档-课程信息
  4. 这才是索罗斯暴富的真实秘密
  5. 在 2040 年前,实现净零碳排放
  6. table添加一行且可编辑 vue_Vue使用AntDesign 表格可添加 可编辑行 可选择
  7. CC2530外部中断控制LED灯开关
  8. HTML5实现点击触发灯泡开关
  9. gee mysql数据库_MySQL
  10. 如何解决WORD安全模式错误问题