0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

适配器模式设计

冬至子 来源:全栈开发的码农 作者:全栈开发的码农 2023-06-01 14:22 次阅读

适配器模式一般是在我们要把”现有的对象“应用到新的环境中时使用,通过编写一个Adapter类,把原有的类应用到新的类中,而不必修改原有类,也不必重写已有类。

如下图所示,原有一个AdvancedPlayer接口类,可以播放flv和MP4格式的视频文件。现在新建了一个MediaPlayer接口类,使之可以播放MP3、flv和MP4格式的文件。

因为已有AdvancedPlayer接口类实现了播放flv和MP4格式的文件,现在只需要编写一个播放MP3格式文件的AudioPlayer实现类和一个Adapter实现类,在Adapter类中使用AdvancedPlayer类的对象,使之可以播放flv和MP4类型的文件。

图片

AdvancedPlayer接口类:

package adapter;
public interface AdvancedPlayer {
  public void playFlv();
  public void playMP4();
}

FlvPlayer实现类:

package adapter;
public class FlvPlayer implements AdvancedPlayer {
  @Override
  public void playFlv() {
    System.out.println("播放Flv格式文件");
  } 
  @Override
  public void playMP4() {   
  }
}

MP4Player实现类:

package adapter;
public class MP4Player implements AdvancedPlayer{
  @Override
  public void playFlv() {
  }
  @Override
  public void playMP4() {
    System.out.println("播放MP4文件");  
  }
}

MediaPlayer接口类:

package adapter;
public interface MediaPlayer {
  public void play(String audioType, String fileName);
}

AudioPlayer实现类:

package adapter;
public class AudioPlayer implements MediaPlayer {
  Adapter adapter;
  @Override
  public void play(String audioType, String fileName) {
    if(audioType.equals("MP3")) {
      System.out.println("播放MP3:"+fileName);
    }else if(audioType.equals("flv")||audioType.equals("MP4")) {
      adapter=new Adapter(audioType);
      adapter.play(audioType, fileName);
    }else {
      System.out.println("文件格式未知");
    }  
  }
}

Adapter适配器实现类:

package adapter;
public class Adapter implements MediaPlayer{
  AdvancedPlayer advancedPlayer;
  public Adapter(String audioType) {
    if(audioType.equals("flv")) {
      advancedPlayer =new FlvPlayer();
    }else if(audioType.equals("MP4")) {
      advancedPlayer = new MP4Player();
    }
  }
  @Override
  public void play(String audioType,String fileName) {
    if(audioType.equals("flv")){
      advancedPlayer.playFlv();
    }else if(audioType.equals("MP4")) {
      advancedPlayer.playMP4();
    }  
  }
}

主函数调用方式:

package main;
import adapter.*;
public class AdapterPattern {
  public static void main(String[] args) {
    AudioPlayer audioPlayer=new AudioPlayer();

    audioPlayer.play("flv", "视频.flv");
    audioPlayer.play("MP4", "视频.MP4");
    audioPlayer.play("MP3", "音乐.MP3");
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 适配器
    +关注

    关注

    8

    文章

    1952

    浏览量

    68001
  • audio
    +关注

    关注

    1

    文章

    320

    浏览量

    59246
  • AudioPlayer
    +关注

    关注

    0

    文章

    2

    浏览量

    1437
收藏 人收藏

    评论

    相关推荐

    适配器模式和代理模式的区别

    对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。  (3)高扩展性    适配器模式  在计算机编程中,适配器模式(有时候也称包装样式或者包装
    发表于 10-22 15:17

    适配器模式实现

    目录第一章 适配器模式介绍第二章 适配器模式实现(类适配器)2.1、关系依赖图2.2、创建交流电2.3、定义直流电2.4、创建充电器2.5、
    发表于 09-15 07:11

    适配器模式的作用

    适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。港式插头转换器
    发表于 11-11 06:30

    适配器模式相关资料推荐

    结构型模式一、适配器模式(一)定义:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能
    发表于 11-11 06:03

    缺省适配器模式基本概念

    在这一节我们就看一看第一类:缺省适配器模式一、缺省适配器模式基本概念1.1 说明当不需要全部实现接口提供的方法时,可以设计一个适配器抽象类实
    发表于 11-11 07:53

    对象适配器模式基本概念

    在这一节我们就看一看第一类:对象适配器模式一、对象适配器模式基本概念1.1 说明对象适配器模式
    发表于 11-11 07:09

    什么是硬件适配器模式

    硬件适配器模式提供一种方法,使已经存在的硬件接口能适应应用期望。当应用需要使用一个接口而硬件提供另一种时,硬件适配器模式创建元素在两个接口之间进行转换。
    发表于 12-21 07:55

    适配器模式的本质及分类

    什么是适配器 在计算机编程中,适配器模式(有时候也称包装样式或者包装)把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。一个适配
    发表于 10-18 15:06 3153次阅读

    适配器模式和代理模式的区别

    适配器模式适配器模式有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。代理模式:为其他对象提供一种代理以控制对这个对象的访问。
    发表于 01-12 11:56 5275次阅读
    <b class='flag-5'>适配器</b><b class='flag-5'>模式</b>和代理<b class='flag-5'>模式</b>的区别

    适配器模式的应用

    在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已
    发表于 01-12 14:28 1006次阅读
    <b class='flag-5'>适配器</b><b class='flag-5'>模式</b>的应用

    JavaScript设计模式适配器模式

    适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。港式插头转换器
    发表于 11-06 16:21 5次下载
    JavaScript设计<b class='flag-5'>模式</b>之<b class='flag-5'>适配器</b><b class='flag-5'>模式</b>

    设计模式-适配器模式-以电压适配器为例

    超级链接: Java常用设计模式的实例学习系列-绪论参考:《HeadFirst设计模式》1.关于适配器模式适配器
    发表于 11-07 09:36 17次下载
    设计<b class='flag-5'>模式</b>-<b class='flag-5'>适配器</b><b class='flag-5'>模式</b>-以电压<b class='flag-5'>适配器</b>为例

    什么是适配器模式?怎样使用适配器模式进行货币转换?

    在软件开发中,通常使用具有不兼容接口的现有代码或外部库。 适配器模式提供了一个优雅的解决方案,充当不兼容接口之间的桥梁,无需修改现有代码即可实现无缝集成。
    的头像 发表于 07-19 14:35 593次阅读

    设计模式中什么是适配器模式

    适配器模式(Adapter),将一个类的接口适配成用户所期待的。
    的头像 发表于 08-02 10:00 830次阅读
    设计<b class='flag-5'>模式</b>中什么是<b class='flag-5'>适配器</b><b class='flag-5'>模式</b>?

    什么是适配器模式

    1、什么是适配器模式? Convert the interface of a class into another interface clients expect.Adapter lets
    的头像 发表于 10-09 11:16 2361次阅读
    什么是<b class='flag-5'>适配器</b><b class='flag-5'>模式</b>