Java模式(适配器型号)
今天阅读Java该适配器模式,这里有一个小的总结和下谈感受。对于将来使用。
首先。让我们有关适配器先说说。
适应是“来源”至“目标”适应。其中连接这两个的关系是适配器。它负责“源”过度到“目标”。
举个简单的样例,比方有一个“源”是一个对象人,他拥有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 add
public 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!");
}
}
好吧,。在第一个适配器模式谈到这个,我希望能够提高自己,我们有一个。
Java模式(适配器型号)的更多相关文章
- Java模式之模板方法模式
当我们遇到的业务逻辑具有大致相同的方式的时候,我们也许就该将这个业务逻辑抽象出来,采用模板方法,来进行封装我们的代码,提高代码的重用性,以及可维护性.下面是我的一个复习用的案例: 第一步:我们需要一个 ...
- Java模式开发之责任链模式
Java模式开发之责任链模式 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓.击鼓的地方与传花的地方是分开的.以示公正. 開始击鼓时,花束就開始依次传递,鼓 ...
- Java经典23结构模型的设计模式(三)------附加代理模式、适配器型号、Facade模式的差异
本文介绍了7样的结构模型中的其余2种:轻量级.代理模式. 一.享元模式FlyWeight 享元模式比較简单且重要,在非常多场合都被用到.仅仅只是封装起来了用户看不到.其概念:运用共享内存技术最大限度的 ...
- java演示适配器(adapter)模式
为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并 ...
- Java设计模式(三)原型模型 适配器型号
(五岁以下儿童)原型模型 Prototype 样机模型旨在复制一个现有对象来创建新对象.而不是通过的方式的实例.原型模式须要实现 Cloneable 接口.覆写clone方法,复制分为浅复制.深复制. ...
- Java 实现适配器(Adapter)模式
平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的 ...
- Java模式(适配器模式)【转载】
转载地址: http://blog.csdn.net/elegant_shadow/article/details/5006175 今天看了下Java中的适配器模式,以下就来小做下总结和谈谈感想,以便 ...
- Java模式(适配器模式)
今天看了下Java中的适配器模式,下面就来小做下总结和谈谈感想,以便日后使用. 首先,先来先讲讲适配器.适配就是由“源”到“目标”的适配,而其中链接两者的关系就是适配器.它负责把“源”过度到“目标”. ...
- Android 设计模式模式适配器
自定义适配器模式:一类的接口,转换成客户的期望,也是一个接口.适配器使原本接口不是与类兼容可以无缝.下面两个图看起来更加清晰 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...
随机推荐
- 经常使用Firefox插件大全
Web开发者经常使用的火狐插件 1)FireShot:是一个截图工具,来源于截图软件Screenshot Studio的开发商,是一个Firefox扩展或者说是Firefox版的Screenshot ...
- shu_1241 邮局位置问题
http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=5 分析: 由于题目中的距离是折线距离,所以能够分别考虑两个方向.又x方 ...
- 【Android小应用】颈椎保健操Android开源项目
前段时间在知乎上回答已入 IT 行业的前辈,有哪些关于保护身体健康的知识分享给 IT 新人? ,回复了一张图片,评论里面有知友希望通过程序可以实现,我后面尝试着通过程序实现了效果,现开源出来,大家可以 ...
- 让window命令行支持自己主动补全[相似Linux的Tab键]
打开注冊表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor下 项"CompletionChar"(REG_DWO ...
- Codeforces 164 E Compatible Numbers
主题链接~~> 做题情绪:好题,做拉的比赛的时候想了非常久,想到枚举变幻某一位的 0 为 1 .可是每一个数都这样枚举岂不超时的节奏,当时没想到事实上从大到小枚举一次就 ok 了. 解题思路: ...
- LeetCode——Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...
- HDU 5066 Harry And Physical Teacher(物理题)
HDU 5066 Harry And Physical Teacher 思路:利用物理里面的动量守恒公式.因为保证小车质量远大于小球.所以能够把小车质量当成无穷大带进去,得到答案为2 * v0 - v ...
- c#代码规范和质量检查工具这点事
c#代码规范和质量检查工具这点事 代码风格检查:StyleCop 代码缺陷检查:FxCop 代码质量: 代码度量值/Code Metrics StyleCop 介绍 The StyleCop tool ...
- 学习 easyui 之二:jQuery 的 ready 函数和 easyloader 的加载回调函数
Ready 事件不一定 ready 使用 easyloader 的时候,必须要注意到脚本的加载时机问题,easyloader 会异步加载模块,所以,你使用的模块不一定已经加载了.比如下面的代码. &l ...
- 主要的核心思想是取cookie然后发查询请求,不需要浏览器做代理(转)
需求是催生项目和推进项目的不竭动力. 背景: 最近,因为媳妇要做个B超检查,想着去大医院查查应该更放心,所以就把目标瞄准在A医院.早已耳闻A院一号难求万人空巷,所以把所有能接触到的机会都看了一遍,线下 ...