您的位置:首页 > 编程语言 > Java开发

海谈湖扯Java适配器模式

2016-05-24 15:27 344 查看
扯扯鸟蛋:论适配之于人之生存之重要性

达尔文的《物种起源》中提出了进化论的观点,也即:“物竞天择,适者生存”!说的是之于社会环境人的适配、生物的适配。用到我们程序猿的代码世界,也许就是我们所写的代码之于Java编译规则的适配,编程思维之于项目最优化思维的适配吧。人无适配,无以生存;码无适配,无以……,也许后果也是挺严重的哦!

 

玩玩理论:什么是适配器模式?

《JAVA与模式》一书中开头是这样描述适配器(Adapter)模式的:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

 

问问上帝:为什么会有适配器?

从哲学的高度来讲:存在即合理(不在做过多的解释)!

从实际的角度来讲,刚好前几天去福米公司参观,福米给送了一个小米插线板,就举一个插线板的例子吧!

我们敲代码的笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是适配器模式所做的事情。

 

看看实例:有哪几种适配器模式?

适配器模式主要有类适配器模式、对象适配器模式、接口适配器模式(也有的叫缺省适配模式),

坚持不懈,老习惯,一个一个的给大家说说!

类适配器模式:

目标角色的源代码,以JAVA接口的形式实现的,这个接口声明了两个方法:evolution1()和evolution2()。

public interface Environment {
public void evolution1();//源类Adaptee也有的方法
public void evolution2();//源类Adaptee没有的方法,实现类需要进一步实现的方法!
}
源角色Adaptee是一个具体类,它有一个evolution1()方法,但是没有evolution2()方法。

public class Adaptee {
public void evolution1(){
System.out.println("物竞天择,适者生存!");
}
}
适配器角色Darwin扩展了Adaptee,同时又实现了Environment接口。由于Adaptee没有提供evolution2()方法,而目标接口又定义了这个方法,因此适配器角色Darwin实现了这个方法。

public class Darwin1 extends Adaptee implements Environment{
public void evolution2() {
System.out.println("二度重申:物竞天择,适者生存!");
}
}
对象适配器模式:

比较类的适配器模式与对象的适配器模式,相同的是,对象的适配器模式把被适配的类的API转换成为目标类的API,不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。所以,对象适配器的例子中,我们只需要修改Darwin类的代码即可,如下:

public class Darwin2 implements Environment{
private Adaptee ad;

public Darwin2(Adaptee ad){
this.ad=ad;
}

public void evolution1() {
ad.evolution1();
}
public void evolution2() {
System.out.println("二度重申:物竞天择,适者生存!");
}
}

接口适配器模式:

接口的适配器模式,冥冥中早已经用过了,还记得MouseAdapter吗?肯定记得,看其中的意思,就知道是一个适配器的角色,再详细点,就是一个鼠标适配器角色,怎么用的?哦,大家应该都懂了吧!!! 废话不多说,废例不能省!那就将上面的例子的代码稍作修改吧!

坚持不懈,老习惯,看一个接口适配器的例子!

public interface Environment {
public void evolution1();
public void evolution2();
public void evolution3();
public void evolution4();
public void evolution5();
public void evolution6();
//后面还可以有很多很多的待实现的方法!!!
}
public abstract class Adaptee implements Environment{
public void evolution1(){
}
public void evolution2(){
}
public void evolution3(){
}
public void evolution4(){
}
public void evolution5(){
}
public void evolution6(){
}
}

public class Darwin3 extends Adaptee{
public void evolution2() {
System.out.println("二度重申:物竞天择,适者生存!");
}
public void evolution5() {
System.out.println("五度重申:物竞天择,适者生存!");
}
}

写写总结:适配器有什么优缺点?

优点:扩展性好,在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。    

缺点:过多的使用适配器,会让系统非常零乱,不易整体进行把握。

 

更多的更多,期待你的思想与分享!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: