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

目录
相关文章
|
2天前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
19天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
29天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
33 4
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
50 0
[Java]23种设计模式
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
3月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
3月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
3月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 Java
Java设计模式
Java设计模式
32 0