我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 Mp3Player。默认情况下,Mp3Player 可以播放 mp3 格式的音频文件。

我们还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放  mp4 格式的文件,也可以增加其他格式。

我们想要让 Mp3Player 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。

Mp3Player 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo,我们的演示类使用 Mp3Player 类来播放各种格式。

 

1、MP3接口

 

package Adapter;
/*
 * MP3接口
 */
public interface MediaPlayer {

	public void play(String audioType, String fileName);
	
}

  

2、MP3实现类

 

package Adapter;
/*
 * Mp3实现类
 */
public class Mp3Player 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("mp4")){
			//若要让Mp3能播放Mp4,找适配器扩展Mp4
			mediaAdapter = new MediaAdapter(audioType);
			
			mediaAdapter.play(audioType, fileName);
		}
		else{
			System.out.println("其他");
		}
		
	}

}

  

 3、Mp4接口

package Adapter;
/*
 * MP4接口
 */
public interface AdvancedMediaPlayer {

	public void playMp4(String fileName);
	
	//其他
}

 

(可以定义更多方法,比如:Mp5)

 

 

4、Mp4实现类

package Adapter;
/*
 * Mp4实现类
 */
public class Mp4Player implements AdvancedMediaPlayer{

	@Override
	public void playMp4(String fileName) {
		System.out.println("Playing mp4 file. Name: "+ fileName);
	}

}

 (增加Mp5实现类)

  

5、适配类

package Adapter;
/*
 * 适配类:媒婆作用
 */
public class MediaAdapter implements MediaPlayer{

	//引入Mp4接口
	AdvancedMediaPlayer advancedMediaPlayer;
	
	/*
	 * 构造器:判断传进来的是Mp4还是其他,来选择new的对象
	 */
	public MediaAdapter(String audioType){
		if(audioType.equalsIgnoreCase("mp4")){
			advancedMediaPlayer = new Mp4Player();
		}else{
			System.out.println("Error");
		}
	}
	

	@Override
	public void play(String audioType, String fileName) {
		if(audioType.equalsIgnoreCase("mp4")){
			advancedMediaPlayer.playMp4(fileName);
		}else{
			System.out.println("其他");
		}
		
	}

}

  

(构造器里判断:如果是Mp5,new Mp5的实现类)

(相应的,重写的play方法里也进行增加一个判断)

 

 

6、测试类

package Adapter;
/*
 * 测试类
 */
public class AdapterPatternDemo {

	public static void main(String[] args) {
		
		Mp3Player mp3Player = new Mp3Player();
		mp3Player.play("mp3", "alone.mp3");
		mp3Player.play("mp4", "lonely.mp4");
	}

}

  

 结果:

Playing mp3 file. Name: alone.mp3
Playing mp4 file. Name: lonely.mp4

 

 posted on 2017-10-16 10:52  布鲁布鲁sky  阅读(204)  评论(0编辑  收藏  举报