一、个人感想
先总结一下整个过程的感想:
感觉在网上找了很多资料,大部分大牛们把这个设计模式解释的很仔细,但是用词实在过于专业,很难让初学者读懂,自己找了一个比较恰当的例子写了一遍,对这个设计模式有了一定的认识,希望这种解释可以得到认可。
其实总结一下适配器模式的最终目的:在一个没有实现某个接口的类,想在这个接口中规定的方法中实现这个类想要执行的方法等。(或者说这个类实现了另一个接口,在这个类中实现了该接口的方法,但是想在另外一个接口定义的方法中执行本类中实现另外一个类的方法),这时适配器模式就诞生了。
但是这么做事为什么呢?我们完全可以在一个框架或者项目中,有两个接口A和B,在a接口中有方法a,在接口b中有方法b,可以一个类实现两个接口,实现方法a,方法b,并且在方法a中调用方法b。这样就做到了上述的概念,但是再仔细想一想,这样这个类就受到了限制,他必须实现两个接口,我们需要在只实现一个接口的环境下达到上述的概念话,还是需要适配器模式的作用。这样感觉框架的灵活性更强,结构更好。
二、适配器模式例子
下面我来举例说明适配器模式大致的用法:
拿大家现实生活中很常用的两个东西来举例,大家都知道台式机的鼠标和键盘吧,假如我现在买了一个鼠标和一个键盘, 鼠标的是usb接口,键盘确实较老的ps2接口,但是我现在想在我的笔记本上利用这个鼠标和键盘,笔记本上面只有usb接口,那么我怎么才能使用我的键盘呢?我需要再买一条ps2转usb的适配线,就能成功的在我的笔记本上面是用键盘。
三、代码
我们用代码来实现上述的例子:
首先我们笔记本上面有一个usb接口
public interface Usb {
public void usbconnection();
}
我们的鼠标是usb接口的线,可以插在usb接口上面
public class Usbimpl implements Usb{
private Usb usb;
public void Usbimpl(Usb usb){
this.usb=usb;
}
//此方法就像usb线上的usb插头
public void usbconnection() {
System.out.println("用usb借口插入");
}
}
我们有一个ps2接口的键盘,他只能插在ps2接口上面:
ps2接口
```
public interface Ps2 {
public void ps2connection();
}
ps2接口的键盘
public class Ps2impl implements Ps2{
private Ps2 ps2;
public void Ps2impl(Ps2 ps2){
this.ps2=ps2;
}
//此方法就像键盘上面的ps2插头
public void ps2connection() {
System.out.println("使用ps2接口插入");
}
}
下面我们要做的就是添加一个适配器,让我们的ps2接口的键盘转换成usb接口,可以插在我们的笔记本上面:
首先这个适配器的终极目的是要可以插入usb接口,所我们让这个适配器实现usb接口
public class PtoUAdapter implements Usb{
//但是这个适配器又需要链接到我们ps2接口的键盘上面,所以我们把 ps2接口引入适配器
private Ps2 ps2;
public PtoUAdapter(){
}
public PtoUAdapter(Ps2 ps2){
this.ps2=ps2;
}
实现了usb接口我们就要做一个usb的插头,并且在这个插头的另一边我们接上ps2的插头
public void usbconnection() {
ps2.ps2connection();
}
最后我们的用户来实现将键盘链接到笔记本:
public class Test {
public static void main(String[] args) {
//首先我们先拿出具有ps2插头的键盘
Ps2 ps2 = new Ps2impl();
//其次我们拿出我们的适配器,此时参数就像当初我们已经将适配器链接了键盘
Usb u = new PtoUAdapter(ps2);
//将适配器插入usb接口
u.usbconnection();
}
}
此时输出结果为,用ps2接口插入
这样,我们就利用了适配器将键盘插入到笔记本上面,就可以同时使用了。
所以个人感觉适配器的用途总结来说,就是在不破坏框架结构的同时,假如框架更新了一个新的接口,新的接口利用老接口的规定,我们就可以利用适配器模式来达到目的。