设计模式(7)--适配器模式
2017-10-16 09:30
253 查看
什么是适配器模式?
适配器模式是一种行为型模式,是作为两个不兼容的接口之间的桥梁。例如电源的适配器,接口的适配器等等。
什么时候使用适配器?
适配器模式并不是一个经常使用的设计模式, 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)
如何实现适配器?
测试客户端
从这个例子可以看到适配器的核心就是,根据需求的不同,找到不同的处理类,本身类似于java的多态机制。
适配器模式是一种行为型模式,是作为两个不兼容的接口之间的桥梁。例如电源的适配器,接口的适配器等等。
什么时候使用适配器?
适配器模式并不是一个经常使用的设计模式, 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的多态机制。
相关文章推荐
- 24种设计模式之---(适配器模式)
- 设计模式之适配器模式
- php设计模式 适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式的艺术之道--适配器模式
- 设计模式学习--------5.适配器模式学习
- 设计模式学习笔记-适配器模式
- 设计模式之适配器模式
- 设计模式-适配器模式(Adapter Pattern)
- 设计模式——适配器模式
- JAVA设计模式初探之——适配器模式
- 设计模式~适配器模式
- 设计模式-06-适配器模式
- PHP设计模式之适配器模式代码实例
- 设计模式心得:适配器模式(adapter pattern)和外观模式(facade pattern)
- 《您的设计模式》(CBF4LIFE)之“适配器模式”【整理】
- JS设计模式六:适配器模式
- js原生设计模式——10适配器模式之参数适配器
- 探索设计模式之----适配器模式