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

  • 相关阅读:
    104.Maximum Depth of Binary Tree
    103.Binary Tree Zigzag Level Order Traversal
    102.Binary Tree Level Order Traversal
    101.Symmetric Tree
    100.Same Tree
    99.Recover Binary Search Tree
    98.Validate Binary Search Tree
    97.Interleaving String
    static静态初始化块
    serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/lrxvx/p/9407122.html
Copyright © 2011-2022 走看看