适配器模式设计

2023-05-31 14:05:21
关注

适配器模式一般是在我们要把”现有的对象“应用到新的环境中时使用,通过编写一个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");
  }
}

您觉得本篇内容如何
评分

相关产品

PCE Instruments PCE-313A 气象仪器

16 GB)用于在线数据传输的接口,由电池或其他电源组件供电/附加K型热电偶连接PCE-313 A气候计专为空调和测量技术的专业应用而设计。除了相对湿度外,气候计还测定环境温度。SD卡存储器(1… 16 GB)可在直接模式或数据记录模式下以可调采样率记录湿度和温度读数。要使用这些功能,您可以预先通过键盘对湿度计进行编程或预先设置,然后在现场永久记录,而不必一直观察过程。对于永久记录,我们建议通过可选购的电源适配器为湿度计供电。根据数据记录功能记录的读数可以传输到PC机上进行进一步分析(SD卡上的(.xls文件)。

泰克 TDP0500 仪器

TDP1000、TDP0500 和 P6251 高压差分探头提供了当今开关模式电源 (SMPS)、CAN/LIN 总线和高速数字系统设计所需要的出色的高速电子和机械性能。MHz 探头带宽18 dB CMRR(250 MHz 50X 衰减)可选择的带宽限制滤波器直流抑制通用 DUT 连接 用于探测小型几何电路元件的紧凑型探头头部直针、方针、焊接、变量点距标配附件强大的可靠性设计易用在示波器画面上实现自动单位缩放和读数TDP1000,TDP0500直接连接到具有 TekVPI™ 探头接口的示波器轻松访问示波器显示探头菜单,获取探头设置控制和运行状态信息通过示波器实现远程 GPIB/USB 探头控制自动调零 – 输出偏置调零P6251直接连接 TekProbe™ 接口示波器,或者使用 TCA-BNC 适配器连接 TekConnect® 示波器应用高速开关模式电源设计CAN/LIN总线设计高速数字设计数字设计和检定生产工程测试研发TDP1000、TDP0500 和 P6

TMP Pro Distribution 9150 音频麦克风

舒尔Beta 52® A是一款高输出动态话筒,具有专门为踢腿鼓和其他低音乐器设计的定制频率响应。它提供卓越的攻击和重击,并提供录音室质量的声音,即使在极高的声压级。Beta 52A在整个频率范围内都采用了改进的超心形模式,以确保反馈前的高增益和对无用声音的出色抑制。内置动态锁定支架适配器和集成卡侬接口简化了安装,特别是如果麦克风要放在踢鼓内。支架适配器使话筒位置保持固定,即使受到剧烈打击和强烈振动,也能防止滑倒。坚固的钢网格栅保护贝塔52A免受滥用和磨损与旅游。输入额定低Z相位膜片上的正压力在针2上产生相对于针3的正电压在1000赫兹时最大SPL 174分贝(计算得出的)连接器三针专业音频连接器(公卡侬型)外壳镀银蓝色搪瓷的硬化压铸金属,哑光成品钢格栅,可调,锁定架适配器

TelephoneStuff.com 98801N 耳机

立体声收听需要带有蓝牙立体声模式(A2DP)或用于iPod的蓝牙适配器的移动电话。MOTOROKR S9将头戴式设计与创新的音乐和通话控制结合在一起,对于任何一个过着积极生活方式并热爱音乐的人来说,它都是必不可少的。MOTOROKR S9蓝牙耳机的特点是:按一下按钮,从音乐切换到通话-轻巧、谨慎的无线设计-头戴式设计舒适和稳定的风格-高品质立体声可播放卓越的音乐-包括两个额外的耳尖,以获得更高的舒适度-集成触摸敏感控制装置小时的音乐收听和7小时的通话或单次充电6天待机时间-180毫安时锂离子充电电池-2.0版蓝牙无线技术,通话质量更好,干扰更小,连接速度更快-2级蓝牙无线技术范围可达10米(33英尺)-包括充电用迷你USB接口

评论

您需要登录才可以回复|注册

提交评论

广告

感知论坛

这家伙很懒,什么描述也没留下

关注

点击进入下一篇

一文搞懂策略设计模式

提取码
复制提取码
点击跳转至百度网盘