适配器模式的定义
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个已有类的接口转换成需要的接口形式,是为了让原本接口不兼容的类可以互相作用。适配器模式通过创建一个适配器类,该适配器类实现了目标接口,并持有一个被适配类的对象。适配器类通过调用被适配类的方法来实现目标接口的方法,从而将被适配类的接口转换成目标接口。
简单里说:就是我们生活中的接口转换器,手机充电器(将 220V 转换为 5V 的电压)等等
适配器模式的结构
- Target:目标接口、期望接口,是当前业务中所期待的接口,它可以是抽象类或者接口。
- Adaptee:被访问和适配的现存的接口(被适配者)
- Adapter:适配器模式的核心角色,其他两个角色时已存在的角色,而适配器角色时需要新建立。它的职责是将被适配Adaptee角色已有的接口通过继承或者类关联的方法转换为目标角色Target匹配的接口,从而达到对Adaptee接口与Target接口进行匹配的目的。
适配器模式的分类
- 对象适配器:适配器持有原始对象的引用,从而将其自己的接口与原始对象的接口“结合”在一起。
- 类适配器:适配器通过多重继承实现将一个类的接口转换成另一个类所期望的接口形式。
适配器模式的优缺点
优点:
- 解决接口不匹配问题:适配器模式可以在现有的类之间提供一个无缝的接口转换,使它们可以协同工作。
- 复用现有代码:适配器模式允许我们重用已经存在的类,而无需修改其源代码。
- 提高灵活性:通过适配器模式,我们可以在系统中引入新的类,并与已有类进行适配,从而提高系统的灵活性和可扩展性。
缺点:
- 增加了类的数量:使用适配器模式会增加代码的复杂性,因为需要引入适配器类。
- 可能引入冗余代码:有时候适配器类可能只是简单地委派调用给被适配者,这可能引入一些冗余的代码。
代码更好理解
对象适配器
// 原始接口
interface Shape {
void draw();
}
// 原始类
class Rectangle implements Shape {
public void draw() {
System.out.println("Rectangle draw()");
}
}
// 适配器类
class ObjectAdapter implements Shape {
private Rectangle rectangle;
public ObjectAdapter(Rectangle rectangle) {
this.rectangle = rectangle;
}
public void draw() {
rectangle.draw();
}
}
// 测试代码
public class ObjectAdapterTest {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
Shape shape = new ObjectAdapter(rectangle);
shape.draw();
}
}
注意就是在适配器类中,实现的类中注入未实现的接口。
类适配器
// 原始类
class Rectangle {
void draw() {
System.out.println("Rectangle draw()");
}
}
// 目标接口
interface Shape {
void draw();
}
// 适配器类
class ClassAdapter extends Rectangle implements Shape {
public void draw() {
super.draw();
}
}
// 测试代码
public class ClassAdapterTest {
public static void main(String[] args) {
Shape shape = new ClassAdapter();
shape.draw();
}
}
其实就是一个类的继承和接口的实现,super接口的方法,然后使用时候直接调用方法即可。
看下这个博主的示例,我觉得更好的理解!!!https://blog.youkuaiyun.com/weixin_45663027/article/details/134170885