2019独角兽企业重金招聘Python工程师标准>>>

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

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

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

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

源的代码如下:

public class Person {private String name;private String sex;private int age;public void speakJapanese(){System.out.println("I can speak Japanese!");}public void speakEnglish(){System.out.println("I can speak English!");}...//以下省略成员变量的get和set方法
}
 

目标接口的代码如下:

public interface Job {public abstract void speakJapanese();
public abstract void speakEnglish();
public abstract void speakFrench();}

适配器的代码如下:

public class Adapter extends Person implements Job{public void speakFrench() {}}

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

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

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

仅贴出适配器代码:

public class Adapter implements Job {Person person;public Adapter(Person person) {this.person = person;}public void speakEnglish() {person.speakEnglish();}public void speakJapanese() {person.speakJapanese();}//new addpublic void speakFrench() {}}
对象的适配器模式,把“源”作为一个构造参数传入适配器,然后执行接口所要求的方法。这种适配模式可以为多个源进行适配。弥补了类适配模式的不足。

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

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

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

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

接口类:

 

public interface Job {public abstract void speakJapanese();public abstract void speakEnglish();public abstract void speakFrench();public abstract void speakChinese();}

抽象类:

 

public abstract class JobDefault implements Job{public void speakChinese() {}public void speakEnglish() {}public void speakFrench() {}public void speakJapanese() {}}

实现类:

 

public class JobImpl extends JobDefault{public void speakChinese(){System.out.println("I can speak Chinese!");}}

转载于:https://my.oschina.net/stonezing/blog/124218

java设计模式:适配器设计模式相关推荐

  1. 结构设计模式 - 适配器设计模式

    结构设计模式 - 适配器设计模式 PANKAJ  17评论 适配器设计模式是结构设计模式之一,其使用使得两个不相关的接口可以一起工作.连接这些不相关接口的对象称为适配器. 目录[ 隐藏 ] 1适配器设 ...

  2. 设计模式---适配器设计模式

    设计模式---适配器设计模式 什么事适配器: 1. 在使用监听的时候,需要定义一个类事件监听器接口 2. 通常接口中有多个方法,而程序中不一定所有的方法都用到,但又必须重写,很繁琐 3. 适配器简化了 ...

  3. 黑马程序员-Java基础:设计模式总结

    --Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- Java基础部分设计模式 一.设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的 ...

  4. Java设计模式(七):适配器设计模式

    1. 应用场景 在软件开发中,也就是系统的数据和行为都正确,但接口不相符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又 ...

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

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

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

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

  7. 适配器设计模式,简单的Java代码模拟

    /**适配器设计模式* 问题:* 接口(方法比较多)--实现类(仅仅使用一个也得把其他方法给实现了,哪怕是空实现)* 结局方案:* 接口(方法比较多)--适配器类(实现接口,仅仅是空实现)--实现类( ...

  8. Java 基础学习之字符串的简单操作和适配器设计模式

    一 适配器设计模式 1.适配器是什么? 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作.其别名为包装器(Wrapper) ...

  9. Java进阶之路~适配器设计模式amp;字符串方法

    一 适配器设计模式 1.类适配器(没有关系的类和接口产生联系,可以扩展功能,增加已有代码的复用性) 2.对象适配器(装饰者,使用对象进行连接,来扩展功能) 3.缺省适配器 eg:iphone6 3.5 ...

最新文章

  1. 【mysql错误】用as别名 做where条件,报未知的列 1054 - Unknown column 'name111' in 'field list'...
  2. 密码学摘要算法之MD5
  3. Codeforces Round #325 (Div. 2) Laurenty and Shop 模拟
  4. 45 jump game II(贪心)
  5. linux下使用cat打开文件乱码
  6. Android之常见面试题
  7. linux服务器配置ssl证书
  8. 类的序列化[Serializable]
  9. 探索比特币源码1-运行 Bitcoin Core Node
  10. linux df命令无反馈,Linux-df命令
  11. AI 智能会议系统(36)---AI 书单
  12. nginx实现共享以及实现原理
  13. git gui怎么拉取项目代码_Gitee码云如何更新项目上的代码?
  14. MySQL查询时当offset较大时查询效率低
  15. 51单片机:定时器/计数器TMOD设定
  16. 认识计算机听课记录20篇,【中学信息技术听课记录】 信息技术听课记录15篇及评析_初中信息技术听课记录_高中信息技术听课记录20篇_东城教研...
  17. sheng的学习笔记-mysql框架原理
  18. 【ToyDB-Rust】超详细介绍
  19. HBuilder页面不小心删除了或者改掉了
  20. SSM框架学习(一)————SSM框架简介

热门文章

  1. python文字识别算法_Python图像处理之图片文字识别(OCR)
  2. Python之web开发(三):python使用django框架搭建网站之SQLserver数据库连接
  3. IoU 判断矩形区域重叠
  4. 【直播回放】2小时全面剖析图像分类任务,学习CV必知
  5. 【通知】有三AI项目研发组成员招收条件及可对接业务暂行方案
  6. 【杂谈】一招,同时可视化18个开源框架的网络模型结构和权重
  7. 【AI不惑境】网络深度对深度学习模型性能有什么影响?
  8. 【学习求职必备】百度AI和它的7大AI黑科技
  9. 2022年全球及中国建筑隔震系统行业设施布局与十四五应用决策建议报告
  10. 中国飞机制造及修理行业未来需求预测及发展态势研究报告2021版