适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
手机没电了,手机是TypeC接口,但是目前只有USB接口,怎么办呢?需要一个转换头
类的适配器模式
/**
* USB接口
*/
public interface IUsb {
void doUsb();
}
/**
* 需要适配的USB
*/
public class Usb implements IUsb {
@Override
public void doUsb() {
System.out.println("usb");
}
}
/**
* TypeC接口(目标接口)
*/
public interface ITypeC {
void doTypeC();
}
/**
* 目标(未使用)
*/
public class TypeC implements ITypeC {
@Override
public void doTypeC() {
System.out.println("TypeC");
}
}
/**
* 适配器
*/
public class Adapter extends Usb implements ITypeC {
@Override
public void doTypeC() {
System.out.println("我将");
super.doUsb();
System.out.println("转换成TypeC了");
}
}
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Adapter adapter = new Adapter();
adapter.doTypeC();
}
}
对象的适配器模式
/**
* 适配器
*/
public class Adapter implements ITypeC {
private IUsb usb;
public Adapter(IUsb usb) {
this.usb = usb;
}
@Override
public void doTypeC() {
System.out.println("我将");
this.usb.doUsb();
System.out.println("转换成TypeC了");
}
}
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Adapter adapter = new Adapter(new Usb());
adapter.doTypeC();
}
}
接口适配器模式
public interface A {
void a();
void b();
void c();
void d();
void e();
void f();
}
public abstract class Adapter implements A {
public void a(){}
public void b(){}
public void c(){}
public void d(){}
public void e(){}
public void f(){}
}
public class Ashili extends Adapter {
public void a(){
System.out.println("实现A方法被调用");
}
public void d(){
System.out.println("实现d方法被调用");
}
}