一、解释说明
把不能直接使用的功能,通过适配器转换成能使用的功能。如充电插头转换器。
二、案例代码
1、需要适配的类(非usb接口)
package 设计模式.适配器模式;
//不是usb接口的插座
public class NoUsb {
//插座
public void socket(){
System.out.println("不是usb接口的插座");
}
}
2、目标接口(需要的usb接口)
package 设计模式.适配器模式;
//是usb的插座
public interface Usb {
//转化方法 返回一个能用的接口
public void adapt();
}
3、适配器(把非usb接口转化为usb接口)
package 设计模式.适配器模式;
//转化器
public class UsbAdapter implements Usb{
private NoUsb usb;
//把非usb接口注入进来
public UsbAdapter(NoUsb usb){
this.usb = usb;
}
//把非usb接口转为usb接口
@Override
public void adapt() {
usb.socket();
System.out.println("转换成usb接口啦,好开心");
}
}
4、客户端(笔记本可以使用usb接口了)
package 设计模式.适配器模式;
//笔记本
public class Cliet {
public static void main(String[] args) {
//创建非usb接口
NoUsb noUsb = new NoUsb();
//创建适配器
Usb usbAdapter = new UsbAdapter(noUsb);
//进行使用
usbAdapter.adapt();
}
}
三、适用场景
兼容问题
四、优缺点
优点
1、将目标类和适配者类解耦
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好,符合开闭原则