结构型模式-适配器模式
1 什么是适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式可以解决接口不兼容的问题,使得原本由于接口不匹配而无法协同工作的类可以一起工作。
适配器模式涉及三个主要角色:目标接口(Target Interface)、适配器(Adapter)和被适配者(Adaptee)。
- 目标接口(Target Interface)定义了客户端所期望的使用的接口。
- 适配器(Adapter)是一个实现了目标接口的类,它通过包装或继承被适配者来完成接口的转换。
- 被适配者(Adaptee)是需要被适配的类或接口,它拥有不兼容目标接口的方法或功能。
2 举个例子
以下是一个简单的适配器模式示例:假设我们有一个旧的音乐播放器,它有一个播放音乐的方法 playMusic(),但是我们的新系统中希望使用一个统一的接口 MediaPlayer 来播放音乐。
首先,我们创建目标接口 MediaPlayer:
class MediaPlayer {
public:
virtual void play() = 0;
};
接下来,我们定义一个适配器类 Adapter,它实现了目标接口 MediaPlayer,同时通过组合或继承方式将旧的音乐播放器(被适配者)包装起来:
#include <iostream>
class Adapter : public MediaPlayer {
private:
OldMusicPlayer* oldPlayer;
public:
Adapter(OldMusicPlayer* player) : oldPlayer(player) {}
void play() override {
oldPlayer->playMusic();
}
};
然后,我们实现被适配者,即旧的音乐播放器 的 OldMusicPlayer 类:
class OldMusicPlayer {
public:
void playMusic() {
std::cout << "Playing music..." << std::endl;
}
};
最后,我们可以使用适配器来播放音乐:
int main() {
OldMusicPlayer* oldPlayer = new OldMusicPlayer();
MediaPlayer* player = new Adapter(oldPlayer);
player->play(); // 调用统一的接口,实际上会通过适配器调用旧的播放方法
delete oldPlayer;
delete player;
return 0;
}
运行上述代码,将输出 “Playing music…”,说明适配器成功地将目标接口 MediaPlayer 的方法调用转换为了旧的音乐播放器的方法调用。
这个例子中,我们通过适配器模式,将旧的音乐播放器(OldMusicPlayer)适配到了新的系统中,使其可以通过统一的接口 MediaPlayer 进行使用。这样,我们可以在不修改旧代码的情况下,使其与新系统协同工作。
3 总结
适配器模式对于在现有系统中引入新接口或组件,或者与现有接口不兼容的第三方库进行集成非常有用。
作者QQ:115124903,欢迎交流。
每一步踏出,都是一次探索,一次成长。
每一步踏出,都是一次探索,一次成长。