适配器模式一般是在我们要把”现有的对象“应用到新的环境中时使用,通过编写一个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
引适配器模式的作用
引适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。港式插头转换器
发表于 11-11 06:30
什么是硬件适配器模式
硬件适配器模式提供一种方法,使已经存在的硬件接口能适应应用期望。当应用需要使用一个接口而硬件提供另一种时,硬件适配器模式创建元素在两个接口之间进行转换。
发表于 12-21 07:55
适配器模式的本质及分类
什么是适配器 在计算机编程中,适配器模式(有时候也称包装样式或者包装)把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。一个适配
发表于 10-18 15:06
•3153次阅读
适配器模式和代理模式的区别
适配器模式:适配器模式有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。代理模式:为其他对象提供一种代理以控制对这个对象的访问。
发表于 01-12 11:56
•5275次阅读
适配器模式的应用
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已
发表于 01-12 14:28
•1006次阅读
JavaScript设计模式之适配器模式
引适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。港式插头转换器
发表于 11-06 16:21
•5次下载
什么是适配器模式?怎样使用适配器模式进行货币转换?
在软件开发中,通常使用具有不兼容接口的现有代码或外部库。 适配器模式提供了一个优雅的解决方案,充当不兼容接口之间的桥梁,无需修改现有代码即可实现无缝集成。
什么是适配器模式
1、什么是适配器模式? Convert the interface of a class into another interface clients expect.Adapter lets
评论