适配器模式
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。
角色
Target(目标抽象类)
定义所需要的接口,可以是抽象类或接口也可以是具体类。
AdapterClass(适配器类)
适配器继承被适配者类,实现Target,在接口的实现方法中调用超类的方法。
MatchesClass(适配者类)
适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。
类适配器模式
- 被适配者类(MatchesClass)
public class ClassAdapter {
public void testMethodOne(){
System.out.println("被适配的方法!");
}
}
- 适配器类(AdapterClass)
public class Adapter extends ClassAdapter implements TargetInterface {
/**
* @Author LiDong
* @Description //TODO 重写接口中的方法,调用超类的方法
* @Date 21:24 2020/12/5
* @Param []
* @return void
**/
@Override
public void testMethod() {
System.out.println("调用Adapter的testMethod()!");
super.testMethodOne();
}
}
- 目标抽象类
public interface TargetInterface {
void testMethod();
}
- 测试类
public static void main(String[] args) {
TargetInterface targetInterface = new Adapter();
targetInterface.testMethod();
}
对象适配器模式
对象适配器与类适配器不同之处在于,类适配器通过继承来完成适配,对象适配器则是通过调用对象的属性完成。
public class Adapter implements TargetInterface {
private ClassAdapter classAdapter = new ClassAdapter();
/**
* @Author LiDong
* @Description //TODO 重写接口中的方法,对象调用类的方法
* @Date 21:24 2020/12/5
* @Param []
* @return void
**/
@Override
public void testMethod() {
System.out.println("调用Adapter的testMethod()!");
classAdapter.testMethodOne();
}
}
主要优点
-
将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构。
-
增加了类的透明性和复用性。
-
灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器
-
将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构。
-
增加了类的透明性和复用性。
-
灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器