zoukankan      html  css  js  c++  java
  • 设计模式之结构型--适配器模式

    适配器:

    将一个类的接口转换成客户希望的另外一个接口,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

  • 相关阅读:
    Charpter5 软件测试总结
    Charpter3 关于闰年测试
    Charpter2 新的测试用例
    Charpter1 等价类划分方法分析与应用
    软件测试第一周学习总结
    关于软件测试学习的心得
    软件测试-同行评审
    白盒测试
    黑盒测试
    Java实现的闰年测试程序
  • 原文地址:https://www.cnblogs.com/lrxvx/p/9407122.html
Copyright © 2011-2022 走看看