设计模式#5 - 适配器模式
在过去的几周里,我分享了一些流行的设计模式,比如PubSub和Singleton模式。今天,我将分享本系列的另一篇文章,但请在下方评论区告诉我下一篇应该介绍哪种设计模式!
适配器模式
适配器模式是一种结构化设计模式,允许接口不兼容的对象进行协作。它通常用于在不修改源代码的情况下使现有类与其他类兼容。当现有类的接口与所需接口不匹配时,此模式尤其有用。
真实案例
让我们考虑一个现实生活中的例子。您的任务是将第三方视频播放器集成到您的应用中。但是,该视频播放器的功能和方法接口与您的应用预期不同。在这种情况下,您可以使用适配器模式为视频播放器创建一个包装类,使第三方代码与您现有的应用代码兼容。
这是您在这种情况下使用的代码:
// 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();
}
}
让我们分解一下上面的代码:
ThirdPartyVideoPlayer
假设您的应用程序想要使用一个外部库。但是,它的接口可能与您的应用程序不兼容。VideoPlayerAdapter
是适配器类。它封装了ThirdPartyVideoPlayer
。适配器的接口与您的应用程序兼容。当适配器的play()
方法被调用时,它会在内部调用 上的必要方法ThirdPartyVideoPlayer
。Application
是您的应用程序代码。它会创建一个 的实例VideoPlayerAdapter
,并像使用普通视频播放器一样使用它。当它调用play()
适配器上的方法时,适配器会将其转换为对 的相应调用ThirdPartyVideoPlayer
。
这样,Application
类就不需要了解任何ThirdPartyVideoPlayer
工作原理。如果您需要用其他库替换ThirdPartyVideoPlayer
,只需编写一个新的适配器即可——Application
类可以保持不变。这就是适配器模式的主要优点:它将您的应用程序代码与第三方库的细节解耦。
适配器模式和外观模式的区别
虽然适配器模式和外观模式看起来很相似,但它们有不同的用途,并且在不同的环境中使用:
- 目的:
- 适配器模式:适配器模式的主要目的是使两个不兼容的接口相互兼容。它允许使用具有不同接口的现有类,就好像它实现了不同的接口一样。
- 外观模式:外观模式的主要目的是为复杂的子系统提供简化的接口。它隐藏了子系统的复杂性,并提供了一个更高级的接口,使子系统更易于使用。
- 用法:
- 适配器模式:当你需要集成与应用程序中现有类或接口不匹配的新类或库时,可以使用此模式。适配器模式是关于将特定接口适配到预期接口。
- 外观模式:当你想简化与复杂子系统的交互时,可以使用它。外观模式提供了一种与系统交互的直接方法,隐藏了系统的复杂性。
- 设计:
- 适配器模式:通常涉及创建一个新类(适配器),该类实现客户端期望的接口并将调用转换为适配的类。
- 外观模式:涉及创建一个外观类,为客户端提供简化的方法,通常聚合来自子系统的多种功能。
总而言之,虽然两种模式都提供了一种与现有代码协同工作的方法,但适配器模式侧重于接口兼容性,而外观模式则侧重于简化与复杂系统的交互。
超级邀请 - 赢取 5,000 美元
因此,当您在这里时,请允许我邀请您参加我们即将于八月举行的超级活动!
本次远程活动将为您提供展示技能和创造力的机会,挑战如何利用我们的实时沟通工具,将虚拟互动转化为现实。使用 SuperViz,您有机会赢得 5,000 美元的奖金。
立即注册以接收更新、提示和资源并准备进行破解!
文章来源:https://dev.to/superviz/design-pattern-5-adapter-pattern-4gif