适配器的定义
适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。
两种模式:
- 类适配器模式:使用继承的适配器 接口
- 对象适配器模式:使用委托的适配器 抽象类
涉及角色:
- 源角色(Adaptee):需要适配的类
- 目标角色(Target):想要得到的接口
- 适配器(Adapter):转换装置
类适配器模式例子
源角色
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
目标角色
public interface Print {
void printWeak();
void printStrong();
}
适配器
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
测试类
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
打印输出
(Hello)
*Hello*
对象适配器模式
目标角色
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
适配器
public class PrintBanner extends Print{
private Banner banner;
public PrintBanner(String string) {
banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithAster();
}
@Override
public void printStrong() {
banner.showWithParen();
}
}
适配器的优点
系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
适配器的缺点
过多的使用适配器,会让系统非常零乱,不易整体进行把握。
使用场景
- 旧版本适配新版本,旧版本经过测试已经稳定运行很久。在更新版本时,想要抛弃旧版本,又要兼容旧版本,就可以使用适配器模式来适配旧版本对象
- 功能不同的类使用适配器进行转换,使得类可以使用。
- 让现有的类适配新的接口