1.概念
起到桥梁的作用,结合两个接口的功能。
2.意图
将一个类的接口转换成用户希望的接口。
ex:音频播放器只能播放mp3格式文件,通过使用更高级的播放器来播放avi和mp4文件。
3.注意
适配器是用来解决正在使用的项目问题的,不是在详细设计时使用的。
代码:
package com.adapter; /** * 播放器接口 */ public interface MediaPlay { void play(String audio, String fileName); }
package com.adapter; /** * * 高级播放器 */ public interface AdvanceMediaPlay { void playMP4(String audio, String fileName); void playAVI(String audio, String fileName); }
package com.adapter; /** * * 实现高级播放器接口 * 或者 分两个MP4类和avi类分别实现高级播放器接口 */ public class AdvanceMediaPlayImpl implements AdvanceMediaPlay{ @Override public void playMP4(String audio, String fileName) { System.out.println("Play:" + audio + "; fileName:" + fileName); } @Override public void playAVI(String audio, String fileName) { System.out.println("Play:" + audio + "; fileName:" + fileName); } }
package com.adapter; /** * 适配器实现播放器接口 */ public class MediaAdapter implements MediaPlay{ AdvanceMediaPlay advanceMediaPlay; // 关联高级播放器 /** * 构造方法 * 初始化传参,只需要传递播放类型 * @param audio */ public MediaAdapter(String audio){ if(audio.equalsIgnoreCase("mp4") || audio.equalsIgnoreCase("avi")){ advanceMediaPlay = new AdvanceMediaPlayImpl(); } } /** * * 实现按类型播放功能 * @param audio * @param fileName */ @Override public void play(String audio, String fileName) { if(audio.equalsIgnoreCase("mp4")){ advanceMediaPlay.playMP4(audio, fileName); }else if(audio.equalsIgnoreCase("avi")){ advanceMediaPlay.playAVI(audio, fileName); } } }
package com.adapter; /** * 实现播放器接口 */ public class MediaPlayImpl implements MediaPlay { MediaAdapter mediaAdapter; // 使用适配器 @Override public void play(String audio, String fileName) { if(audio.equalsIgnoreCase("mp3")){ System.out.println("Play:" + audio + "; fileName:" + fileName); }else if(audio.equalsIgnoreCase("mp4")){ mediaAdapter = new MediaAdapter("mp4"); mediaAdapter.play(audio, fileName); }else if(audio.equalsIgnoreCase("avi")){ mediaAdapter = new MediaAdapter("avi"); mediaAdapter.play(audio, fileName); }else{ System.out.println("No Play:fileName:" + fileName); } } }
package com.adapter; public class MediaPlayDemo { public static void main(String[] args){ MediaPlayImpl mediaPlayImpl = new MediaPlayImpl(); mediaPlayImpl.play("mp3", "MP3"); mediaPlayImpl.play("mp4", "MP4"); mediaPlayImpl.play("avi", "avi"); mediaPlayImpl.play("avi33", "avi33"); } }
result:
Play:mp3; fileName:MP3 Play:mp4; fileName:MP4 Play:avi; fileName:MP4 No Play:fileName:MP4
详情:http://www.runoob.com/design-pattern/adapter-pattern.html