前面介绍的几种设计模式都是创建型模式,用于以不同的方式创建对象。下面我们来看看适配器模式,这是一种结构型模式,用于在两个无关的接口之间搭建桥梁。
适配器模式主要用于在新旧代码直接转换。
直接看例子吧。假设我们有一个音乐播放器。
public interface MusicPlayer {
void playMusic();
}
class MyMusicPlayer implements MusicPlayer {
@Override
public void playMusic() {
System.out.println("播放音乐");
}
}
然后还有一个视频播放器。
public interface VideoPlayer {
void playVideo();
}
class MyVideoPlayer implements VideoPlayer{
@Override
public void playVideo() {
System.out.println("播放视频");
}
}
我们可以看到这两个接口的方法不同,现在我们希望以一种统一的方式播放音乐和视频。所以就需要类似下面的适配器。在适配器中,我们做了一些工作,将两个接口的方法包装,统一使用play方法调用。
public interface MediaPlayer {
void play();
}
class MediaPlayerAdapter implements MediaPlayer {
private MusicPlayer musicPlayer;
private VideoPlayer videoPlayer;
private boolean isMusicPlayer = false;
private boolean isVideoPlayer = false;
public MediaPlayerAdapter(Object player) {
if (player instanceof MusicPlayer) {
musicPlayer = (MusicPlayer) player;
isMusicPlayer = true;
} else if (player instanceof VideoPlayer) {
videoPlayer = (VideoPlayer) player;
isVideoPlayer = true;
}
}
@Override
public void play() {
if (isMusicPlayer) {
musicPlayer.playMusic();
} else if (isVideoPlayer) {
videoPlayer.playVideo();
}
}
}
我们可以看到,适配器的作用很强大,可以将不同接口联系起来,所以适配器模式的使用非常广泛。留意一下就会在很多地方发现它的身影。