设计模式#5 - 适配器模式

2025-06-07

设计模式#5 - 适配器模式

在过去的几周里,我分享了一些流行的设计模式,比如PubSubSingleton模式。今天,我将分享本系列的另一篇文章,但请在下方评论区告诉我下一篇应该介绍哪种设计模式!

适配器模式

适配器模式是一种结构化设计模式,允许接口不兼容的对象进行协作。它通常用于在不修改源代码的情况下使现有类与其他类兼容。当现有类的接口与所需接口不匹配时,此模式尤其有用。

真实案例

让我们考虑一个现实生活中的例子。您的任务是将第三方视频播放器集成到您的应用中。但是,该视频播放器的功能和方法接口与您的应用预期不同。在这种情况下,您可以使用适配器模式为视频播放器创建一个包装类,使第三方代码与您现有的应用代码兼容。

这是您在这种情况下使用的代码:

// Adapter class
class VideoPlayerAdapter {
    constructor() {
        this.externalPlayer = new ThirdPartyVideoPlayer({
            // some configuration
        });
    }

    play() {
        const video = this.externalPlayer.getVideo();
        this.externalPlayer.playVideo(video, {
            // additional parameters
        });
    }
}

// Your application code
class Application {
    constructor() {
        this.videoPlayer = new VideoPlayerAdapter();
    }

    start() {
        // Play video using your application code
        this.videoPlayer.play();
    }
}

Enter fullscreen mode Exit fullscreen mode

让我们分解一下上面的代码:

  1. ThirdPartyVideoPlayer假设您的应用程序想要使用一个外部库。但是,它的接口可能与您的应用程序不兼容。
  2. VideoPlayerAdapter是适配器类。它封装了ThirdPartyVideoPlayer。适配器的接口与您的应用程序兼容。当适配器的play()方法被调用时,它会在内部调用 上的必要方法ThirdPartyVideoPlayer
  3. Application是您的应用程序代码。它会创建一个 的实例VideoPlayerAdapter,并像使用普通视频播放器一样使用它。当它调用play()适配器上的方法时,适配器会将其转换为对 的相应调用ThirdPartyVideoPlayer

这样,Application类就不需要了解任何ThirdPartyVideoPlayer工作原理。如果您需要用其他库替换ThirdPartyVideoPlayer,只需编写一个新的适配器即可——Application类可以保持不变。这就是适配器模式的主要优点:它将您的应用程序代码与第三方库的细节解耦。

适配器模式和外观模式的区别

虽然适配器模式和外观模式看起来很相似,但它们有不同的用途,并且在不同的环境中使用:

  1. 目的
    • 适配器模式:适配器模式的主要目的是使两个不兼容的接口相互兼容。它允许使用具有不同接口的现有类,就好像它实现了不同的接口一样。
    • 外观模式:外观模式的主要目的是为复杂的子系统提供简化的接口。它隐藏了子系统的复杂性,并提供了一个更高级的接口,使子系统更易于使用。
  2. 用法
    • 适配器模式:当你需要集成与应用程序中现有类或接口不匹配的新类或库时,可以使用此模式。适配器模式是关于将特定接口适配到预期接口。
    • 外观模式:当你想简化与复杂子系统的交互时,可以使用它。外观模式提供了一种与系统交互的直接方法,隐藏了系统的复杂性。
  3. 设计
    • 适配器模式:通常涉及创建一个新类(适配器),该类实现客户端期望的接口并将调用转换为适配的类。
    • 外观模式:涉及创建一个外观类,为客户端提供简化的方法,通常聚合来自子系统的多种功能。

总而言之,虽然两种模式都提供了一种与现有代码协同工作的方法,但适配器模式侧重于接口兼容性,而外观模式则侧重于简化与复杂系统的交互。

超级邀请 - 赢取 5,000 美元

因此,当您在这里时,请允许我邀请您参加我们即将于八月举行的超级活动

本次远程活动将为您提供展示技能和创造力的机会,挑战如何利用我们的实时沟通工具,将虚拟互动转化为现实。使用 SuperViz,您有机会赢得 5,000 美元的奖金。

立即注册以接收更新、提示和资源并准备进行破解!

文章来源:https://dev.to/superviz/design-pattern-5-adapter-pattern-4gif
PREV
使用 CSS 居中元素
NEXT
设计模式#4 - 发布者/订阅者模式