Java模式(适配器模式)

Java模式(适配器模式)

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

 

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

 

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

 

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

 

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

 

源的代码例如以下:

 

 目标接口的代码例如以下:

 适配器的代码例如以下:

 

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

 

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

 

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

仅贴出适配器代码:

 

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

 

如今来对2种适配模式做个分析:

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

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

 

最后,再来顺带谈谈默认适配器模式:这样的模式的核心归结例如以下:当你想实现一个接口但又不想实现全部接口方法,仅仅想去实现一部分方法时,就用中默认的适配器模式,他的方法是在接口和详细实现类中加入�一个抽象类,而用抽象类去空实现目标接口的全部方法。而详细的实现类仅仅须要覆盖其须要完毕的方法就可以。代码例如以下:

接口类:

抽象类: 

实现类:

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119180.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm 设置环境变量_电脑环境变量怎么设置

    pycharm 设置环境变量_电脑环境变量怎么设置今天运行tensorflow的时候,发现在pycharm下,程序无法找到CUDA的libcupti.so文件。而在添加完环境变量:exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/local/cuda/extras/CUPTI/lib64:后,在命令行可以运行程序。然而,在Pycharm中运行程序,仍无法找到CUDA库文件。经过下午的折腾,终于

  • Python—多线程(threading)

    1.概述threading提供线程相关操作,python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复和中断threading提供的类:Thread,Lock,Rloc

    2021年12月18日
  • 注册邮箱发送短信验证_网易邮箱注册系统未收到短信

    注册邮箱发送短信验证_网易邮箱注册系统未收到短信分享概要:讲述yii框架,用户注册然后以邮箱通知和短信通知用户注册状态。短信使用阿里云,邮箱使用swiftmailer插件。支持php~~~功能点:用户注册通知用户注册类:publicfunctionactionCreateUsers(){//数据过滤数据判断这个省略了。。。。直接看重点if($model->save()){//对用户数据的保存…

    2022年10月13日
  • 浏览器支持H.265解码总结

    浏览器支持H.265解码总结文章目录引言问题解决方案3.1方案1:开发自己的浏览器3.2方案2:前端JS解码+canvas显示3.3方案3:前端WebAssembly转码+video显示3.4方案4:前端W

  • ubuntu16.04.3安装教程_Ubuntu16下安装QQ

    ubuntu16.04.3安装教程_Ubuntu16下安装QQUbuntu16.04.1安装NginxNginx(“enginex”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集

  • 苹果 find my 原理_find区别

    苹果 find my 原理_find区别什么是查我网络?2021年4月21日的苹果发布会发布了一款新的产品:AirTag,防丢器。使用的是BLE+UWB的技术。BLE通过FindMy网络解决了GPS定位的问题;而UWB解决了室内的、厘米级的精准定位问题。二者相互补充,实现了比较精准的定位,为用户提供优秀的物品防丢体验。查我网络(FindMyNetwork)是苹果公司发布的一项应用技术。这项技术比较神奇的一点是,支持这项技术的苹果设备(iPhone,iPad,AirPods,AirTag等),即使本身没有GPS

    2022年10月22日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号