适配器模式
描述
适配器的理解很简单,举个例子:我们都见过存储卡,一般手机都可以装上存储卡,手机可以对存储卡直接读写,但是如果想用电脑读写存储卡呢?那就需要一个媒介---卡托,把存储卡插在卡托上,卡托上有个USB的数据口,而所有电脑都支持USB口,这样就可以用电脑读写存储卡内容了。卡托这个神器就是一种适配器。适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模式。
适配器模式比较官方的概念是:是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
例子
假设有两个播放器AudioPlayer和VideoPlayer,其中AudioPlayer能够播放所有音频文件(如.mp3),VideoPlayer能播放所有视频文件(如.mp4)。但是如果在AudioPlayer中输入一个.mp4的文件,它是不能识别不能播放的,同理,在VideoPlayer中放入.mp3文件也是不可以识别的。
现在我们通过适配器模式,实现一个基于AudioPlayer和VideoPlayer适配器,我们把一个文件放入适配器中,不论是音频还是视频,都可以正常播放。
interface Player {
public void play(String type, String fileName);
}
interface AudioPlayer {
public void playAudio(String fileName);
}
interface VideoPlayer {
public void playVideo(String fileName);
}
class MyAudioPlayer implements AudioPlayer {
@Override
public void playAudio(String fileName) {
System.out.println("Playing. Name: "+ fileName);
}
}
class MyVideoPlayer implements VideoPlayer {
@Override
public void playVideo(String fileName) {
System.out.println("Playing. Name: "+ fileName);
}
}
class MyPlayer implements Player {
AudioPlayer audioPlayer = new MyAudioPlayer();
VideoPlayer videoPlayer = new MyVideoPlayer();
public MyPlayer(){
}
@Override
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("avi")){
videoPlayer.playVideo(fileName);
}else if(audioType.equalsIgnoreCase("mp3")){
audioPlayer.playAudio(fileName);
}
}
}
public class Main{
public static void main(String[] args) {
MyPlayer myPlayer = new MyPlayer();
myPlayer.play("mp3", "h.mp3");
myPlayer.play("avi", "me.avi");
}
}
输出结果:
Playing. Name: h.mp3
Playing. Name: me.avi

浙公网安备 33010602011771号