开发者社区> 兴化> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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

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

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

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

package com.xing.design.adapter;
/**
 *  媒体播放器接口
 * @author xing
 * @createTime
 */
public interface MediaPlayer {
/**
   *  播放
   * @param audioType 类型
   * @param fileName 文件名
   */
public void play(String audioType, String fileName);
}
MP3:
package com.xing.design.adapter;
public class Mp3Player implements MediaPlayer{
@Override
public void play(String audioType, String fileName) {
//播放 mp3 音乐文件的内置支持
if(audioType.equalsIgnoreCase("mp3")){
      System.out.println("播放 mp3 file. Name: "+ fileName);         
    }else{
      System.out.println("无效的媒体类型. "+ audioType + "不支持播放");
    }
  }
}
MP4:
package com.xing.design.adapter;
/**
 *  mp4只能播放MP4
 * @author xing
 * @createTime
 */
public class Mp4Player implements MediaPlayer{
@Override
public void play(String audioType, String fileName) {
if("mp4".equals(audioType)) {
      System.out.println("播放 mp4 file. Name: "+ fileName);      
    }else {
      System.out.println("无效的媒体类型. MP4播放器不支持"+ audioType + "类型播放");
    }
  }
}

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


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

package com.xing.design.adapter;
/**
 *  适配器
 * @author xing
 * @createTime
 */
public class MediaAdapter implements MediaPlayer{
/**
   * MP4播放器
   */
  Mp4Player mp4Player;
public MediaAdapter(String audioType){
if(audioType.equalsIgnoreCase("mp4")){
      mp4Player = new Mp4Player();
    }else {
      System.out.println("只可适配MP4格式,如需扩展,在此处引入。");
    }
  }
@Override
public void play(String audioType, String fileName) {
    mp4Player.play(audioType, fileName);
  }
}


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

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

package com.xing.design.adapter;
public class Mp3Player implements MediaPlayer{
  MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
//播放 mp3 音乐文件的内置支持
if(audioType.equalsIgnoreCase("mp3")){
      System.out.println("播放 mp3 file. Name: "+ fileName);         
    }else if(audioType.equalsIgnoreCase("mp4")){
//mediaAdapter 提供了播放其他文件格式的支持
      mediaAdapter = new MediaAdapter(audioType);
      mediaAdapter.play(audioType, fileName);
    }else{
      System.out.println("无效的媒体类型. "+ audioType + "不支持播放");
    }
  }
}

测试一下:

package com.xing.design.adapter;
public class AdapterPatternDemo {
public static void main(String[] args) {
// MP3播放
    Mp4Player mp4 = new Mp4Player();
    System.out.println("用mp4播放器播放:");
    mp4.play("mp3","2.MP3");
    mp4.play("mp4","2.MP4");
    Mp3Player player = new Mp3Player();
    System.out.println("通过适配器用mp3播放器播放不同类型:");
    player.play("mp3", "3.mp3");
    player.play("mp4", "4.mp4");
    player.play("vlc", "v.vlc");
  }
}

使用场景:

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



总结:

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



END

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计模式之适配器模式
适配器模式定义 适配器模式是结构型设计模式的一种,通过使用继承或组合的方式将不兼容的接口适配为另一种兼容的接口。
9 0
设计模式之适配器
设计模式之适配器
35 0
设计模式之适配器模式
本篇文章是设计模式专题的第八篇文章,我会将遇到的设计模式都一一总结在该专题下,我会把自己对每一种设计模式的感悟写下来,以及在实际工作中我们该如何去灵活应用这些设计模式,欢迎大家关注。本篇文章我们就来讲一讲适配器模式。
48 0
【设计模式】适配器模式
 接着看设计模式,今天介绍的是适配器模式,适配器对于大家应该不陌生,就是适配两种不同类型的物体。如两孔插座和三孔插头之间就需要用到适配器才能正常工作,而在程序世界中,也存在着适配器,下面来分析适配器模式。
44 0
设计模式之适配器模式
介绍 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 适配器模式的优缺点
41 0
设计模式之适配器模式
设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 适配器模式 Adapter Pattern 也叫做变压器模式,也叫包装模式 将一个类的接口变换成客户端所期待的另一个接口,从而使原本接口不匹配而无法再一起工作的两个类能够在一起工作 通用类图 组成 目标
1064 0
设计模式之适配器模式
        设计模式之适配器模式,近期推出!
610 0
设计模式系列-适配器模式
一、上篇回顾         通过上篇的简单讲解,我们知道了,组合模式意图是通过整体与局部之间的关系,通过树形结构的形式进行组织复杂对象,屏蔽对象内部的细节,对 外展现统一的方式来操作对象,是我们处理更复杂对象的一个手段和方式。
676 0
+关注
兴化
码中自由一片天地。。。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载