设计模式-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的。


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

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");
  }
}

使用场景:

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



总结:

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



END

目录
相关文章
|
6月前
|
设计模式 前端开发 Java
【设计模式】【结构型模式】适配器模式(Adpter)
一、入门 什么是适配器模式? 适配器模式是Java中常用的结构型设计模式,它的核心作用就像现实中的电源转换器一样---让原本不兼容的两个接口能够协同工作。 为什么要用适配器模式? 假设我们需要在电商系
167 10
|
10月前
|
设计模式 Java 开发者
「全网最细 + 实战源码案例」设计模式——适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,通过引入适配器类将一个类的接口转换为客户端期望的另一个接口,使原本因接口不兼容而无法协作的类能够协同工作。适配器模式分为类适配器和对象适配器两种,前者通过多重继承实现,后者通过组合方式实现,更常用。该模式适用于遗留系统改造、接口转换和第三方库集成等场景,能提高代码复用性和灵活性,但也可能增加代码复杂性和性能开销。
355 28
|
设计模式 Java
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
|
11月前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
107 2
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
222 0
|
设计模式 XML 存储
【六】设计模式~~~结构型模式~~~适配器模式(Java)
文章详细介绍了适配器模式(Adapter Pattern),这是一种结构型设计模式,用于将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口能够一起工作,提高了类的复用性和系统的灵活性。通过对象适配器和类适配器两种实现方式,展示了适配器模式的代码应用,并讨论了其优点、缺点以及适用场景。
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
设计模式
适配器模式-大话设计模式
适配器模式-大话设计模式
|
设计模式 Go 数据处理
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式

热门文章

最新文章

下一篇
oss云网关配置