# 适配器模式

# 概念

适配器模式(Adapter Pattern)是软件设计模式中的一种结构型模式,用于将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。它主要分为类适配器和对象适配器两种实现方式。

# 作用

1.提高兼容性:使原本接口不兼容的类能够一起工作。

2.增强复用性:可以复用现有类的功能,而无需修改其源代码。

3.增加灵活性:通过适配器模式,可以方便地更换适配器或适配的类,提高系统的灵活性。

4.解耦设计:将接口转换逻辑封装在适配器中。

# 场景

1.系统扩展:当需要将新功能集成到现有系统中,但新功能的接口与现有系统不兼容时。

2.数据格式转换:当需要将一种数据格式转换为另一种数据格式时。

3.接口适配:当需要使用某个类的功能,但其接口与当前系统不匹配时。

4.第三方库或服务集成:当需要集成第三方库或服务,但其接口与系统不兼容时。

# 举例

适配器模式主要有两种实现方式:类适配器和对象适配器。

# 类适配器

通过继承被适配的类并实现目标接口来实现适配。

// 目标接口
public interface Target {
    void request();
}
// 被适配的类
public class Adaptee {
    public void specificRequest() {
        System.out.println("Adaptee's specific request");
    }
}
// 类适配器
public class ClassAdapter extends Adaptee implements Target {
    @Override
    public void request() {
        specificRequest(); // 调用被适配类的方法
    }
}
// 测试类
public class AdapterTest {
    public static void main(String[] args) {
        Target target = new ClassAdapter();
        target.request(); // 输出 "Adaptee's specific request"
    }
}

# 对象适配器

通过在适配器类中包含被适配类的实例并实现目标接口来实现适配。

// 目标接口
public interface Target {
    void request();
}
// 被适配的类
public class Adaptee {
    public void specificRequest() {
        System.out.println("Adaptee's specific request");
    }
}
// 对象适配器
public class ObjectAdapter implements Target {
    private Adaptee adaptee;

    public ObjectAdapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest(); // 调用被适配类的方法
    }
}
// 测试类
public class AdapterTest {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new ObjectAdapter(adaptee);
        target.request(); // 输出 "Adaptee's specific request"
    }
}

# 特点

# 优点

1.提高兼容性:通过适配器模式,可以将原本不兼容的接口转换为目标接口,使得不同接口的类能够协同工作。

2.增强复用性:可以复用已有的类的功能,而无需修改其源代码,符合开闭原则。

3.增加灵活性:适配器模式提供了灵活的适配方式,可以通过类适配器或对象适配器来实现适配。

4.代码可维护性:将适配逻辑封装在适配器类中,使得代码结构更加清晰,便于维护和扩展。

# 缺点

1.增加复杂度:适配器模式会增加系统的类或对象的数量,使得系统更加复杂。

2.性能开销:在某些情况下,适配器模式可能会引入一定的性能开销,尤其是在对象适配器中,需要维护被适配类的实例。

3.适配器实现复杂度:适配器的实现可能会比较复杂,尤其是在需要适配多个接口或处理复杂的适配逻辑时。

总结

适配器模式作为接口转换器,通过适配器类解决接口不兼容问题,采用类适配器(继承被适配类)或对象适配器(组合被适配类实例)实现方式,其核心价值在于复用旧功能不修改源码兼容已有类,解耦协作隔离接口差异,无缝集成连接第三方库或服务,本质是用中间层抹平接口差异的结构型设计模式。



微信公众号

QQ交流群
原创网站开发,偏差难以避免。

如若发现错误,诚心感谢反馈。

愿你倾心相念,愿你学有所成。

愿你朝华相顾,愿你前程似锦。