设计模式(7)--适配器模式
来源:互联网 发布:电脑绑定mac地址 编辑:程序博客网 时间:2024/06/05 07:24
什么是适配器模式?
适配器模式是一种行为型模式,是作为两个不兼容的接口之间的桥梁。例如电源的适配器,接口的适配器等等。
什么时候使用适配器?
适配器模式并不是一个经常使用的设计模式, 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)
如何实现适配器?
public interface MediaPlayer { public void play(String audioType, String fileName);}
public interface AdvancedMediaPlayer { public void playVlc(String fileName); public void playMp4(String fileName);}
public class Mp4Player implements AdvancedMediaPlayer{ @Override public void playVlc(String fileName) { //什么也不做 } @Override public void playMp4(String fileName) { System.out.println("Playing mp4 file. Name: "+ fileName); }}
public class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { //播放 mp3 音乐文件的内置支持 if(audioType.equalsIgnoreCase("mp3")){ System.out.println("Playing mp3 file. Name: "+ fileName); } //mediaAdapter 提供了播放其他文件格式的支持 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"); } }}
public class MediaAdapter implements MediaPlayer { AdvancedMediaPlayer advancedMusicPlayer; public MediaAdapter(String audioType){ if(audioType.equalsIgnoreCase("vlc") ){ advancedMusicPlayer = new VlcPlayer(); } else if (audioType.equalsIgnoreCase("mp4")){ advancedMusicPlayer = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { if(audioType.equalsIgnoreCase("vlc")){ advancedMusicPlayer.playVlc(fileName); }else if(audioType.equalsIgnoreCase("mp4")){ advancedMusicPlayer.playMp4(fileName); } }}
测试客户端
public class Client { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3", "beyond the horizon.mp3"); audioPlayer.play("mp4", "alone.mp4"); audioPlayer.play("vlc", "far far away.vlc"); audioPlayer.play("avi", "mind me.avi"); }}
从这个例子可以看到适配器的核心就是,根据需求的不同,找到不同的处理类,本身类似于java的多态机制。
阅读全文
0 0
- 设计模式7--适配器模式(Adapter)
- 设计模式(7)--适配器模式
- 设计模式-7-适配器模式
- 设计模式(7) ------- 适配器模式
- 设计模式(适配器模式,外观模式)
- 设计模式(四)适配器设计模式
- 设计模式:适配器模式
- 设计模式------适配器模式
- 设计模式:适配器模式
- 设计模式---适配器模式
- 设计模式 适配器模式
- 设计模式 - 适配器模式
- 设计模式--适配器模式
- 设计模式-适配器模式
- 设计模式------适配器模式
- 设计模式---适配器模式
- 设计模式- 适配器模式
- 设计模式 - 适配器模式
- Leetcode||38. Count and Say
- 华为Java机试题
- 充分的准备才是获胜的关键
- vim简单使用教程
- fragment滑动
- 设计模式(7)--适配器模式
- 学习博客
- spring 3以及之后版本的异步方法
- 単例模式(设计模式)
- docker以及docker-compose 使用加速器部署
- 【LeetCode】C# 77、Combinations
- Ubuntu 11.10下将图形用户界面改为Gnome
- IAR 10 版查看目标生成代码量的方法
- 解决CentOS5.5无法使用ifconfig命令