适配器模式

将某个类的接口转换成客户端期望的另一个接口表示。
目的是让原本因接口不匹配不能一起工作的两个类可以协同工作。
主要有三种:

  • 类适配器
  • 对象适配器
  • 接口适配器

类适配器

Adapter类,通过继承 被适配的类, 实现目标类接口, 实现适配。
比方说充电器,它本身相当于Adapter,220V交流电就是被适配的类,我们的目标是直流5V。

代码实现:

//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V {

    @Override
    public int output5V() {
        // TODO Auto-generated method stub
        //获取到220V电压
        int srcV = output220V();
        int dstV = srcV / 44 ; //转成 5v
        return dstV;
    }

}

//被适配的类
public class Voltage220V {
    //输出220V的电压
    public int output220V() {
        int src = 220;
        System.out.println("电压=" + src + "伏");
        return src;
    }
}

//适配接口
public interface IVoltage5V {
    public int output5V();
}


类适配器因为要继承被适配器类,所以目标类必须是一个接口。

对象适配器

就是将上面例子的Adapter类作修改,不是继承被适配类,而是采取委托方式,持有被适配器类的实例。
这样相对类适配器模式更灵活,而且成本更低了。


接口适配器

当不需要全部实现接口提供的方法时,可先设计一个抽象类或接口,并为该接口的每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖这些方法,将它适配成我们所期望的那样。