zoukankan      html  css  js  c++  java
  • 适配器模式

    我们有一个 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
  • 相关阅读:
    vue项目搭建步骤
    文件的操作总结
    WPF 使用皮肤影响按钮自定义
    WPF中:未找到可以 register Name“XXX”的 NameScope
    WPF Label或者其他控件(以Content显示内容的)单个下划线不显示的问题。
    wpf 中GridControl后面总是多一空白列
    WPF设置控件层次问题(最顶层,最底层)
    WPF中设置TreeView的高度随着窗口改变
    C# 检测文件是否被其他进程占用
    XML文件的操作
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/7675951.html
Copyright © 2011-2022 走看看