文章目录
1.概念
1.1 什么是适配器模式
1.2 优点与缺点
优点:
1.可以让原本接口不兼容的类可以合作无间。
2.增加了类的透明性和复用性,现有的系统不改变的前提下引进新的接口。
3.灵活性好,可以通过配置文件来更换适配器。
4.系统可以更易于扩展。
缺点:
1.适配器编写过程需要一定的技巧,如果接口差异过大,适配器编写会非常复杂。
2.增加系统的理解与设计难度,由于适配器模式将一些简单的接口转换成复杂的接口,增加阅读难度。
2.实现方式
2.1 类适配器模式
// Lightning接口
public interface Lightning {
void chargeLightning();
}
// Lightning充电器
public class LightningCharger implements Lightning {
@Override
public void chargeLightning() {
System.out.println("Charging via Lightning connector.");
}
}
// MicroUSB接口
public interface MicroUSB {
void chargeMicroUSB();
}
// 类适配器
public class MicroUSBClassAdapter extends LightningCharger implements MicroUSB {
@Override
public void chargeMicroUSB() {
// 直接使用继承自LightningCharger的方法
System.out.println("Class Adapter converts MicroUSB to Lightning.");
this.chargeLightning();
}
}
// 使用类适配器模式
public class AdapterDemo {
public static void main(String[] args) {
MicroUSBClassAdapter microUSBClassAdapter = new MicroUSBClassAdapter();
microUSBClassAdapter.chargeMicroUSB();
}
}
2.2 对象适配器模式
// Lightning接口
public interface Lightning {
void chargeLightning();
}
// Lightning充电器
public class LightningCharger implements Lightning {
@Override
public void chargeLightning() {
System.out.println("Charging via Lightning connector.");
}
}
// MicroUSB接口
public interface MicroUSB {
void chargeMicroUSB();
}
// 对象适配器
public class MicroUSBObjectAdapter implements MicroUSB {
private Lightning lightning;
public MicroUSBObjectAdapter(Lightning lightning) {
this.lightning = lightning;
}
@Override
public void chargeMicroUSB() {
// 适配器将MicroUSB充电请求转换为Lightning充电
System.out.println("Object Adapter converts MicroUSB to Lightning.");
lightning.chargeLightning();
}
}
// 使用对象适配器模式
public class AdapterDemo {
public static void main(String[] args) {
LightningCharger lightningCharger = new LightningCharger();
MicroUSBObjectAdapter microUSBObjectAdapter = new MicroUSBObjectAdapter(lightningCharger);
microUSBObjectAdapter.chargeMicroUSB();
}
}