系列文章目录
前言
今天继续给大家介绍23种设计模式中的适配器模式,这个模式相比于其他模式比较好理解,我们一起来学习一下吧。🌈
一、什么是适配器模式
适配器模式(Adapter Pattern):适配器模式是一种结构型设计模式,它允许一个类的接口与另一个类的接口不兼容时,创建一个中间的类来适配这些不兼容的接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
二、有哪些应用场景呢
应用场景
三、实战案例
我就举一个简单的例子,假设我们有一个老式的OldMediaPlayer
类,它只能播放mp3
文件,但我们希望它也能播放wav
文件。为此,我们可以创建一个AudioAdapter
类,它实现了MediaPlayer
接口(这是我们想要的新接口),并在内部使用OldMediaPlayer
类来播放mp3
文件,同时对于wav
文件,我们可以使用其他逻辑(比如转换成mp3
或直接使用其他播放器)。
创建
OldMediaPlayer
类:
// 适配者类(现有的类,需要被适配)
public class OldMediaPlayer {
public void playMp3(String filename){
System.out.println("Playing Mp3 File:" + filename);
}
}
接着创建MediaPlayer接口:
interface MediaPlayer {
void play(String audioType, String fileName);
}
最后创建AudioAdapter
类:
//适配器类,在原有OldMediaPlayer 的功能上添加新的功能
public class AudioAdapter implements MediaPlayer{
private OldMediaPlayer oldMediaPlayer;
public AudioAdapter() {
//AudioAdapter创建时实例化OldMediaPlayer
this.oldMediaPlayer = new OldMediaPlayer();
}
@Override
public void play(String audioType, String fileName) {
if ("mp3".equalsIgnoreCase(audioType)){
oldMediaPlayer.playMp3(fileName);
}else if ("wav".equalsIgnoreCase(audioType)){
//拓展新的播放类型
System.out.println("Playing Wav file: " + fileName );
}
}
}
测试
void test1(){
AudioAdapter audioAdapter = new AudioAdapter();
audioAdapter.play("mp3","小苹果.mp3");
audioAdapter.play("wav","小苹果.wav");
}
/*测试结果:
Playing Mp3 File:小苹果.mp3
Playing Wav file: 小苹果.wav
*/
总结
相比到这里大家对适配器模式有了一定的了解,那么我们来总结一下它的优缺点
优点
缺点
它的优点很明显,但是任何设计模式都有优缺点,虽然它能够帮助我们适配新旧功能,但是过多使用适配器反而适得其反,所以,大家在使用设计模式的时候一定要再三考虑。