什么是适配器模式?
将一个类的接口转换成客户希望的另外一个接口,使原来由于不兼容而不能一起工作的类可以一起工作。
什么场景下使用适配器模式?
比如我们要复用早期的一些代码或者第三方库或者别人维护的代码的时候,但这些代码提供的接口和我们此时的使用环境不兼容,我们又不能去修改这些代码,于是就需要使用适配器去适配这些接口以方便使用。
使用一个已经存在的类,但如果它的方法和你的要求不相同时,就应该考虑用适配器模式。
注意:适配器模式在详细设计阶段(开发阶段)不要考虑它,这个是维护或者扩展已有功能系统才需要考虑使用的。
适配器模式主要包括两种类型:
类适配器模式和对象适配器模式。
类适配器模式:
类适配器是通过继承被适配接口的实现类和实现目标接口来创建的。这样可以把该适配器作为一个目标接口的实现类,又可以在该实现类中调用被适配接口的方法。从而达到适配的目的。
例子:
//目标角色
public interface Target{
public void request();
}
//源角色
public class Adaptee{
//原有的业务
public void doSomething(){
System.out.println("a b c ");
}
}
//适配器角色
public class Adapter extends Adaptee implements Target{
public void request(){
super.doSomething();
}
}
对象适配器模式:
通过在适配器类的内部包装一个被适配的类对象,从而把源接口转换成目标接口,其中适配器类时目标类的子类或者实现。
例子:
//目标角色
public interface Target{
public void request();
}
//源角色
public class Adaptee{
//原有的业务
public void doSomething(){
System.out.println("a b c ");
}
}
//适配器角色
public class Adapter implements Target{
private Adaptee adaptee = new Adaptee();
public void request(){
adaptee.doSomething();
}
}
对象适配器和类适配器的区别:
类适配器是类间继承,但由于java中不允许多继承,因此当需要适配多个类的时候,我们使用对象适配器,对象适配器是对象的合成关系或者说是类的关联关系,这是二者的根本区别。