适配器模式

参考《JAVA与模式》之适配器模式

用电源接口做例子,笔记本电脑的电源一般都是接受5V的电压,但是我们生活中的电线电压一般都是220V的输出。这个时候就出现了不匹配的状况,在软件开发中我们称之为接口不兼容,此时就需要适配器来进行一个接口转换。在软件开发中有一句话正好体现了这点:任何问题都可以加一个中间层来解决。这个层我们可以理解为这里的Adapter层,通过这层来进行一个接口转换就达到了兼容的目的。

在GOF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。类适配器模式通过多重继承进行匹配,但除了C++支持多重继承,其它语言多不支持。对象适配器使用对象组合的方式,是动态组合的方式,只要对象类型正确,是不是子类都无所谓。建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。

一、类适配器


//Target角色
public interface FiveVolt {
public int getVolt5();
}

//Adaptee角色,需要被转换的对象
public class Volt220 {
public int getVolt220() {
return 220;
}
}
// adapter角色
public class ClassAdapter extends Volt220 implements FiveVolt {
@Override
public int getVolt5() {
return 5;
}
}

二、对象适配器


//Target角色
public interface FiveVolt {
public int getVolt5();
}
//Adaptee角色,需要被转换的对象
public class Volt220 {
public int getVolt220() {
return 220;
}
}
// 对象适配器模式
public class ObjectAdapter implements FiveVolt {
Volt220 mVolt220;
public ObjectAdapter(Volt220 adaptee) {
mVolt220 = adaptee;
}
public int getVolt220() {
return mVolt220.getVolt220();
}
@Override
public int getVolt5() {
return 5;
}
}

个人理解:新建一个类去实现目标接口的方法,其实在内部持有了一个老对象,表面上调用了新接口方法,实际还是偷偷地用老对象的方法去实现。

三、优缺点
  • 适配器模式的优点

    • 更好的复用性
      系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
    • 更好的扩展性
      在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
  • 适配器模式的缺点
    过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

你可能感兴趣的:(适配器模式)