Java-88-设计模式-4-适配器模式

简介: 适配器(Adapter Pattern)可以将两个不兼容的接口的功能连起来。适配器就是两个不兼容的接口之间的桥梁。也属于结构型模式。

适配器(Adapter Pattern)可以将两个不兼容的接口的功能连起来。适配器就是两个不兼容的接口之间的桥梁。也属于结构型模式。

       举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。

       现在我们有两个播放器接口的实现类,一个是MP3播放器,一个是MP4播放器:

packagecom.xing.design.adapter;
/***  媒体播放器接口* @author xing* @createTime*/publicinterfaceMediaPlayer {
/***  播放* @param audioType 类型* @param fileName 文件名*/publicvoidplay(StringaudioType, StringfileName);
}
MP3:packagecom.xing.design.adapter;
publicclassMp3PlayerimplementsMediaPlayer{
@Overridepublicvoidplay(StringaudioType, StringfileName) {
//播放 mp3 音乐文件的内置支持if(audioType.equalsIgnoreCase("mp3")){
System.out.println("播放 mp3 file. Name: "+fileName);         
    }else{
System.out.println("无效的媒体类型. "+audioType+"不支持播放");
    }
  }
}


MP4:

packagecom.xing.design.adapter;
/***  mp4只能播放MP4* @author xing* @createTime*/publicclassMp4PlayerimplementsMediaPlayer{
@Overridepublicvoidplay(StringaudioType, StringfileName) {
if("mp4".equals(audioType)) {
System.out.println("播放 mp4 file. Name: "+fileName);      
    }else {
System.out.println("无效的媒体类型. MP4播放器不支持"+audioType+"类型播放");
    }
  }
}

       我们用上述MP4播放器可以播放MP4格式的文件,不能播放MP3的:

image.png


现在我们建立一个适配器:

packagecom.xing.design.adapter;
/***  适配器* @author xing* @createTime*/publicclassMediaAdapterimplementsMediaPlayer{
/*** MP4播放器*/Mp4Playermp4Player;
publicMediaAdapter(StringaudioType){
if(audioType.equalsIgnoreCase("mp4")){
mp4Player=newMp4Player();
    }else {
System.out.println("只可适配MP4格式,如需扩展,在此处引入。");
    }
  }
@Overridepublicvoidplay(StringaudioType, StringfileName) {
mp4Player.play(audioType, fileName);
  }
}


       我们在适配器中引入了Mp4Player,如果需要适配多个类型,在这里引入即可。

接下来,我们把适配器引入Mp3Player:

packagecom.xing.design.adapter;
publicclassMp3PlayerimplementsMediaPlayer{
MediaAdaptermediaAdapter;
@Overridepublicvoidplay(StringaudioType, StringfileName) {
//播放 mp3 音乐文件的内置支持if(audioType.equalsIgnoreCase("mp3")){
System.out.println("播放 mp3 file. Name: "+fileName);         
    }elseif(audioType.equalsIgnoreCase("mp4")){
//mediaAdapter 提供了播放其他文件格式的支持mediaAdapter=newMediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
    }else{
System.out.println("无效的媒体类型. "+audioType+"不支持播放");
    }
  }
}

测试一下:

packagecom.xing.design.adapter;
publicclassAdapterPatternDemo {
publicstaticvoidmain(String[] args) {
// MP3播放Mp4Playermp4=newMp4Player();
System.out.println("用mp4播放器播放:");
mp4.play("mp3","2.MP3");
mp4.play("mp4","2.MP4");
Mp3Playerplayer=newMp3Player();
System.out.println("通过适配器用mp3播放器播放不同类型:");
player.play("mp3", "3.mp3");
player.play("mp4", "4.mp4");
player.play("vlc", "v.vlc");
  }
}

结果:

image.png


使用场景:

       系统需要使用现有的类,而此类的接口不符合系统的需要。此时就建立一个可以重复使用的类(适配器),引进没有太大关联的类(要用的类),使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。



总结:

       适配器不是在详细设计时添加的,而是解决正在服役的项目的问题,搞一个适配器类,把不关联的接口全部引入到这个类中,这样只要使用这个适配器类就可以啦。



END

目录
相关文章
|
14天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
31 0
[Java]23种设计模式
|
30天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
2月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
29天前
|
设计模式 Java
Java设计模式
Java设计模式
26 0