一、什么是适配器
适配器是将一种接口改造成另外一种接口的一个包装类;
二、补充说明
有两种实现方式,一种是通过继承,另外一种通过组合;
使用组合实现的时候,跟装饰者模式有点类似,不过侧重点不同,装饰者模式是给对象增加新行为,适配器是为了适配接口;
优点:符合开闭原则;适配者类和目标类解耦;代码复用;
三、角色
目标接口
适配器类
适配者类
使用者
四、例子,JAVA实现
简介:现有一个USB接口和一个PSP接口实现类,功能都是进行充电,该例子的目的就是对PSP接口实现类进行包装,使之能用USB接口充电;
目标接口,使用USB接口充电
|
1
2
3
4
5
6
7
|
package com.pichen.dp.structuralpattern;public interface IUSB { public void charge(); } |
一个USB接口的实现类(该类不属于适配器模式中的角色,只是一个对比)
public class HPUSB implements IUSB{
@Override
public void charge() {
System.out.println("使用惠普USB接口充电~");
}
}
适配者类,使用PSP充电
public class PSP {
public void pspCharge(){
System.out.println("使用PSP接口充电~");
}
}
适配器类(继承方式),继承PSP类,并实现IUSB接口
public class PSPAdapter extends PSP implements IUSB{
@Override
public void charge() {
super.pspCharge();
}
}
适配器类(组合方式),组合PSP对象,并实现IUSB接口
public class PSPAdapter2 implements IUSB{
private PSP psp;
public PSPAdapter2(PSP psp) {
this.psp = psp;
}
@Override
public void charge() {
psp.pspCharge();
}
}
使用者Main,测试结果
public class Main {
public static void main(String[] args) {
IUSB usb = new HPUSB();
usb.charge();
IUSB usb_psp = new PSPAdapter();//继承
usb_psp.charge();
IUSB usb_psp2 = new PSPAdapter2(new PSP());//组合
usb_psp2.charge();
}
}
打印结果:
使用惠普USB接口充电~ 使用PSP接口充电~ 使用PSP接口充电~
