适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
意图
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
实现
这边实现一个播放器。
默认有播放Mp3的功能,之后加入一个新的播放器,可以播放Mp4和Rm
- 创建高级播放器
public interface HightMediaPlayer{
void playMp4(String fileName);
void playRm(String fileName);
}
public class Mp4Player implements HightMediaPlayer{
@Override
public void playMp4(String fileName) {
System.out.println("playing "+fileName);
}
@Override
public void playRm(String fileName) {
}
}
public class RmPlayer implements HightMediaPlayer{
@Override
public void playMp4(String fileName) {
}
@Override
public void playRm(String fileName) {
System.out.println("playing "+fileName);
}
}
- 创建高级播放器适配器
public class MediaAdapter{
private HightMediaPlayer mediaPlayer;
public MediaAdapter(String type){
if (type.equals("mp4")){
mediaPlayer = new Mp4Player();
}else if(type.equals("rm")){
mediaPlayer = new RmPlayer();
}
}
public void play(String type,String fileName){
if (type.equals("mp4")){
mediaPlayer.playMp4(fileName);
}else if(type.equals("rm")){
mediaPlayer.playRm(fileName);
}
}
}
- 实现播放器
public class MediaPlayer{
private MediaAdapter mediaAdapter;
public void play(String type,String fileName){
if (type.equals("mp3")){
System.out.println("playing "+fileName);
}else if(type.equals("rm") || type.equals("mp4")){
mediaAdapter = new MediaAdapter(type);
mediaAdapter.play(type,fileName);
}else{
System.out.println("no player");
}
}
}
- 使用
public static void main(String... args){
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.play("mp3","xxx1.mp3");
mediaPlayer.play("mp4","xxx2.mp4");
mediaPlayer.play("rm","xxx3.rm");
mediaPlayer.play("avi","xxx4.avi");
}
- 结果
I/System.out: playing xxx1.mp3
I/System.out: playing xxx2.mp4
I/System.out: playing xxx3.rm
I/System.out: no player