定义:适配器模式就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配的而无法工作的两个类能够一起工作
使用场景:
- 系统要使用现有的类,但此类的接口不符合系统的需要,即接口不兼容。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关系的一些类,包括一些可能在将来引进的类一起工作
- 需要一个统一的输出接口,而输入端的类的类型不可预知
应用举例:美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。
类图:
- Traget,目标角色,也就是所期待的接口
- Adaptee,需要适配的接口
- Adapter,适配器角色,把源接口转换成目标接口,必须是具体的类
关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。
优点:
- 可以让任何两个没有关联的类一起运行。
- 提高了类的复用。
- 增加了类的透明度。
- 灵活性好。
缺点:
- 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
- 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
interface FiveVolt {
public int getVolt5();
}
//需要适配的接口
class Volt220{
public int getVolt220() {
return 220;
}
}
//适配器
class VoltAdapter extends Volt220 implements FiveVolt{
@Override
public int getVolt5() {
// TODO 自动生成的方法存根
return 5;
}
}
public static void main(String[] args) {
VoltAdapter adapter = new VoltAdapter();
System.out.println("输出电压:"+adapter.getVolt5());
}