今天看了下Java中的适配器模式,以下就来小做下总结和谈谈感想,以便日后使用。

首先,先来先讲讲适配器。适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。举个简单的例子,比 如有一个“源”是一个对象人,他拥有2种技能分别是说日语和说英语,而某个岗位(目标)需要你同时回说日语、英语、和法语,好了,现在我们的任务就是要将 人这个“源”适配的这个岗位中,如何适配呢?显而易见地我们需要为人添加一个说法语的方法,这样才能满足目标的需要。

接着讨论如何加说法语这个方法,也许你会说,为什么不直接在“源”中直接添加方法,我的理解是,适配是为了实现某种目的而为一个源类暂时性的加上某 种方法,所以不能破坏原类的结构。同时不这么做也符合Java的高内聚,低耦合的原理。既然不能直接加,接着我们就来说该怎么来实现为人这个“源”添加一 个方法,而又不破坏“源”的本身结构。

适配器模式有2种,第一种是“面向类的适配器模式”,第二种是“面向对象的适配器模式”。

先说“面向类的适配器模式”。顾名思义,这类适配器模式就是主要用于,单一的为某个类而实现适配的这样一种模式,为什么说只为某个类去实现,一会提到,我们先展示这种类适配模式的代码实现。

源的代码如下:

[c-sharp] view plaincopy

  1. public class Person {

  2. private String name;

  3. private String sex;

  4. private int age;

  5. public void speakJapanese(){

  6. System.out.println("I can speak Japanese!");

  7. }

  8. public void speakEnglish(){

  9. System.out.println("I can speak English!");

  10. }

  11. ...//以下省略成员变量的get和set方法

  12. }

目标接口的代码如下:

[c-sharp] view plaincopy

  1. public interface Job {

  2. public abstract void speakJapanese();

  3. public abstract void speakEnglish();

  4. public abstract void speakFrench();

  5. }

适配器的代码如下:

[c-sharp] view plaincopy

  1. public class Adapter extends Person implements Job{

  2. public void speakFrench() {

  3. }

  4. }

好了,代码看完然后要做一些说明了,之前遗留的一个问题,为什么称其为类适配模式呢?很显然的,Adapter类继承了Person类,而在 Java这种单继承的语言中也就意味着,他不可能再去继承其他的类了,这样也就是这个适配器只为Person这一个类服务。所以称其为类适配模式。

说完类的适配模式,我们要开始说第2种对象的适配器模式了。对象适配器模式是把“源”作为一个对象聚合到适配器类中。同样的话不多说,贴上代码:

源的代码以及目标代码同上,再次不再赘述。

仅贴出适配器代码:

[c-sharp] view plaincopy

  1. public class Adapter implements Job {

  2. Person person;

  3. public Adapter(Person person) {

  4. this.person = person;

  5. }

  6. public void speakEnglish() {

  7. person.speakEnglish();

  8. }

  9. public void speakJapanese() {

  10. person.speakJapanese();

  11. }

  12. //new add

  13. public void speakFrench() {

  14. }

  15. }

对象的适配器模式,把“源”作为一个构造参数传入适配器,然后执行接口所要求的方法。这种适配模式可以为多个源进行适配。弥补了类适配模式的不足。

现在来对2种适配模式做个分析:

1.类的适配模式用于单一源的适配,由于它的源的单一话,代码实现不用写选择逻辑,很清晰;而对象的适配模式则可用于多源的适配,弥补了类适配模式 的不足,使得原本用类适配模式需要写很多适配器的情况不复存在,弱点是,由于源的数目可以较多,所以具体的实现条件选择分支比较多,不太清晰。

2.适配器模式主要用于几种情况:(1)系统需要使用现有的类,但现有的类不完全符合需要。(2)讲彼此没有太大关联的类引进来一起完成某项工作(指对象适配)。

最后,再来顺带谈谈默认适配器模式:这种模式的核心归结如下:当你想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,就用中默认的 适配器模式,他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。代 码如下:

接口类:

[c-sharp] view plaincopy

  1. public interface Job {

  2. public abstract void speakJapanese();

  3. public abstract void speakEnglish();

  4. public abstract void speakFrench();

  5. public abstract void speakChinese();

  6. }

抽象类:

[c-sharp] view plaincopy

  1. public abstract class JobDefault implements Job{

  2. public void speakChinese() {

  3. }

  4. public void speakEnglish() {

  5. }

  6. public void speakFrench() {

  7. }

  8. public void speakJapanese() {

  9. }

  10. }

实现类:

[c-sharp] view plaincopy

  1. public class JobImpl extends JobDefault{

  2. public void speakChinese(){

  3. System.out.println("I can speak Chinese!");

  4. }

  5. }

好了,适配器模式就先说到这了,希望对自己和大家都有一个提高。

源链接Java模式(适配器模式)

转载于:https://blog.51cto.com/8741262/1570779

Java模式(适配器模式)相关推荐

  1. Java | 设计模式-适配器模式

    继代理模式后又来到适配器模式啦,想看之前的也有哦.持续更新中哦.让我们一起加油吧兄弟们,干他. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 你好,如果喜欢,请一起坚持!! ...

  2. 《设计模式详解》结构型模式 - 适配器模式

    适配器模式 5.2 适配器模式 5.2.1 概述 5.2.2 结构 5.2.3 类适配器模式 5.2.4 对象适配器模式 5.2.5 接口适配器模式 5.2.6 应用场景 5.2.7 JDK 源码 - ...

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

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

  4. Java模式参考大全

    Java模式大全 一下模式都在本人博客中有对应的教程,自己搜索 概念 无论承接什么样的需求,是不是身边总有那么几个人代码写的烂,但是却时常有测试小姐姐过来聊天(求改bug).有产品小伙伴送吃的(求写需 ...

  5. java 模式匹配算法_用Java匹配模式

    java 模式匹配算法 如果您使用的是Java,那么您很有可能以前已经看过它的模式匹配. String#matches(String)方法在内部使用Pattern类型,该类型包含更复杂的功能: 通过编 ...

  6. java设计模式适配器模式_Java中的适配器设计模式

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

  7. 结构型模式 适配器模式

    结构型模式 适配器模式 适用于:  是将一个类的接口转换成客户希望的另外一个接口.使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. /*** 结构型模式 适配器模式* Adapter模式也叫 ...

  8. 几个步骤让你学会JAVA的适配器模式

    JAVA设计模式之一适配器模式 适配器模式 首先我们要了解到什么是适配器,然后我们用适配器能干嘛,生活中常见的例子. 适配器模式就是把两个互不关联的东西通过适配器来关联使用 用适配器可以节省代码重复量 ...

  9. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式

最新文章

  1. 使用傅里叶变换进行图像边缘检测
  2. java反射 int_java反射如何调用参数为int的方法?
  3. Linux三剑客之awk详解
  4. cannot import name ‘softmax‘ from ‘scipy.special‘
  5. 计算机类专业要不要练打字,计算机专业学生有必要专门花时间练习打字吗?
  6. 学机械可以转计算机吗,本人合工大车辆工程大一新生,但是机械类前景都不太好,我要不要转计算机,求教?...
  7. pip安装python模块不成功时,你可以尝试这样做
  8. 均线带角度的指标_指标:均线斜率角度计算
  9. 新生必会的linux命令,jstat命令详解
  10. 微博基于 Flink 的机器学习实践
  11. 软件项目的托管平台gitHub
  12. 应用程序热补丁(二):自动生成热补丁
  13. 这5个开源和免费静态代码分析工具,你一个都没有用过吗?不会吧
  14. 手持式频谱分析仪TFN RMT720A 频谱分析 基站分析 路测覆盖
  15. 计算机光盘无法格式化,c盘无法格式化怎么办 c盘无法格式化的解决方法
  16. icoud邮箱无法连接服务器,icloud邮箱如何开启imap
  17. 16进制是否能整除 求余的运算
  18. Kotlin 中的 by lazy
  19. Windows故障恢复控制台使用方法
  20. 使用AI提取文字路径

热门文章

  1. MIT重新发明飞机:无需燃料,每秒万米喷射带你上天 | Nature封面
  2. 中国AI企业吸金旺但90%亏损 今年将迎倒闭潮
  3. 65% 的钱被头部玩家拿走,人工智能要进入下半场?
  4. DARPA发布产业振兴计划,继承摩尔智慧
  5. 业界 | 计算芯片革命来临?英伟达谷歌入局紧逼英特尔
  6. 产品上线前会发生什么故事? | 每日趣闻
  7. 天才黑客 Flanker 疑因拒绝做黑客被拼多多强行辞退
  8. 17 个品牌,113 款 5G 手机,5G 离我们越来越近
  9. 月饼哪家强?Python 告诉你
  10. 大厂面试录取通过率不到3%,我真是太太太难了......