设计模式之结构型--适配器模式

适配器:

将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容
而不能一起工作的那些类可以在一起工作
模式中的角色:
目标接口(Target):客户所期待的接口。目标可以是具体的或者抽象的类,也可以是接口
需要适配的类(Adaptee):需要适配的类或适配者类
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口

  类适配器是继承
例子:这是对象适配器的方式。
步骤 1
为媒体播放器和更高级的媒体播放器创建接口。

MediaPlayer.java
		public interface MediaPlayer {
		   public void play(String audioType, String fileName);
		}

	AdvancedMediaPlayer.java
		public interface AdvancedMediaPlayer { 
		   public void playVlc(String fileName);
		   public void playMp4(String fileName);
		}

  

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

VlcPlayer.java
		public class VlcPlayer implements AdvancedMediaPlayer{
		   @Override
		   public void playVlc(String fileName) {
		      System.out.println("Playing vlc file. Name: "+ fileName);      
		   }
		 
		   @Override
		   public void playMp4(String fileName) {
		      //什么也不做
		   }
		}
	Mp4Player.java
		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);      
		   }
		}

  


步骤 3
创建实现了 MediaPlayer 接口的适配器类。

 

MediaAdapter.java
		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);
		      }
		   }
		}

  

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

AudioPlayer.java
		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");
		      }
		   }   
		}

  


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

AdapterPatternDemo.java
		public class AdapterPatternDemo {
		   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");
		   }
		}

  


步骤 6
执行程序,输出结果:

Playing mp3 file. Name: beyond the horizon.mp3
Playing mp4 file. Name: alone.mp4
Playing vlc file. Name: far far away.vlc
Invalid media. avi format not supported

原文地址:https://www.cnblogs.com/lrxvx/p/9407122.html