我是靠谱客的博主 纯真嚓茶,这篇文章主要介绍JAVA设计模式(五)适配器模式,现在分享给大家,希望可以做个参考。

我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。

何时使用:

  1. 系统需要使用现有的类,而此类的接口不符合系统的需要.
  2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
  3. 通过接口转换,将一个类插入另一个类系中。通过接口转换,将一个类插入另一个类系中。

优点:

  1. 可以让任何两个没有关联的类一起运行。
  2. 提高了类的复用。
  3. 增加了类的透明度。
  4. 灵活性好。

缺点:

  1. 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
  2. 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

实现:

为媒体播放器和更高级的媒体播放器创建接口。

复制代码
1
2
3
4
5
6
package Media; public interface MediaPlayer { public void play(String audioType,String fileName); }
复制代码
1
2
3
4
5
6
7
package Media; public interface AdvancedMediaPlayer { public void playVlc(String fileName); public void palyMp4(String fileName); }

创建实现了 AdvancedMediaPlayer 接口的实体类。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package Media; public class VlcPlayer implements AdvancedMediaPlayer { @Override public void playVlc(String fileName) { System.out.println("Playing vlc file.name:"+fileName); } @Override public void palyMp4(String fileName) { //什么也不做 } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package Media; public class Mp4Player implements AdvancedMediaPlayer { @Override public void playVlc(String fileName) { //什么也不做 } @Override public void palyMp4(String fileName) { System.out.println("Playing mp4 file.name:"+fileName); } }
创建实现了 MediaPlayer 接口的适配器类。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package Media; public class MediaAdapter implements MediaPlayer { AdvancedMediaPlayer advancedMediaPlayer; public MediaAdapter(String audioType) { if(audioType.equalsIgnoreCase("vlc")){ advancedMediaPlayer = new VlcPlayer(); } else if(audioType.equalsIgnoreCase("mp4")){ advancedMediaPlayer = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { if(audioType.equalsIgnoreCase("vlc")){ advancedMediaPlayer.playVlc(fileName); } else if(audioType.equalsIgnoreCase("mp4")){ advancedMediaPlayer.palyMp4(fileName); } } }

创建实现了 MediaPlayer 接口的实体类。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Media; public class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { if(audioType.equalsIgnoreCase("mp3")){ System.out.println("Playing mp3.file.Name"+ fileName); } else if(audioType.equalsIgnoreCase("vlc") ||audioType.equalsIgnoreCase("mp4")){ mediaAdapter = new MediaAdapter(audioType); mediaAdapter.play(audioType,fileName); } else{ System.out.println("Invalid media."+audioType+" format not supported"); } } }

使用 AudioPlayer 来播放不同类型的音频格式。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package Media; import java.lang.reflect.Field; public class AdapterDemo { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3","黄家驹"); audioPlayer.play("mp4", "周杰伦"); audioPlayer.play("vlc","vlc"); audioPlayer.play("avi","not.avi"); } }

输出结果

复制代码
1
2
3
4
Playing mp3.file.Name黄家驹 Playing mp4 file.name:周杰伦 Playing vlc file.name:vlc Invalid media.avi format not supported



最后

以上就是纯真嚓茶最近收集整理的关于JAVA设计模式(五)适配器模式的全部内容,更多相关JAVA设计模式(五)适配器模式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(91)

评论列表共有 0 条评论

立即
投稿
返回
顶部