一、适配器的基本概念
1、定义
将一个接口转换为另一个客户期望的接口。
2、应用场景
你想使用一个已经存在的类,而它的接口不符合你的需求。类似于一个转接口,将电源线的接口转成你电脑可用的接口。
3、类图
-
Target:期待的目标接口
-
Adaptee:原来需要转换的目标
-
Adapter:适配器角色。目的是将原来的目标转换成客户期望的目标
4、特点:
- 更好的复用性和扩展性
二、实例
一个mp4播放器可以播放mp4,一个mp3播放器可以播放mp3,如果想在mp3中播放mp4格式的文件。
1、Target:
期待转成MP3
public interface IMp3Player {
/**
* 播放MP3
* @param fileName
*/
void playMp3(String fileName);
}
public class MyMp3Player implements IMp3Player{
@Override
public void playMp3(String fileName) {
System.out.println("正在播放mp3:"+fileName);
}
}
2、Adaptee
原来的文件mp4
public interface IMp4Player {
/**
* 播放mp4
* @param fileName
*/
void playMp4(String fileName);
/**
* 获取到文件名
* @return
*/
String getFileName();
}
public class MyMp4Player implements IMp4Player{
public String mFileName;
@Override
public void playMp4(String fileName) {
this.mFileName = fileName;
System.out.println("正在播放mp4:"+fileName);
}
@Override
public String getFileName() {
return mFileName;
}
}
3、Adapter
一个格式转换器
public interface IMediaAdapter {
/**
* 文件转换
*/
void conver();
}
public class MyMediaAdapter implements IMediaAdapter{
private IMp4Player mIMp4Player;
private IMp3Player mMp3Player;
public MyMediaAdapter(IMp4Player mp4Player, IMp3Player mp3Player){
this.mIMp4Player = mp4Player;
this.mMp3Player = mp3Player;
}
@Override
public void conver() {
String fileName = mIMp4Player.getFileName();
this.mMp3Player.playMp3(fileName.replace("mp4","mp3"));
}
}
4、使用:
public class AdapterTest {
public static void main(String[] args){
//创建MP4,并播放
IMp4Player mp4Player = new MyMp4Player();
mp4Player.playMp4("my.mp4");
//创建mp3
IMp3Player mp3Player = new MyMp3Player();
//通过适配器将mp4的文件转换,并在mp3中播放
IMediaAdapter adapter = new MyMediaAdapter(mp4Player, mp3Player);
adapter.conver();
}
}
二、Adapter介绍
作用:
- 将一个数据的集合传入,通过Adapter,将每一项数据转换为视图
- 显示的数据类型和数量不同,转换出来的视图也不相同