Mẫu thiết kế - Mẫu bộ điều hợp

Mẫu bộ điều hợp hoạt động như một cầu nối giữa hai giao diện không tương thích. Loại mẫu thiết kế này thuộc mẫu cấu trúc vì mẫu này kết hợp khả năng của hai giao diện độc lập.

Mẫu này liên quan đến một lớp duy nhất chịu trách nhiệm tham gia các chức năng của các giao diện độc lập hoặc không tương thích. Một ví dụ thực tế có thể là một trường hợp đầu đọc thẻ hoạt động như một bộ chuyển đổi giữa thẻ nhớ và máy tính xách tay. Bạn cắm thẻ nhớ vào đầu đọc thẻ và đầu đọc thẻ vào laptop để thẻ nhớ đọc được qua laptop.

Chúng tôi đang trình diễn việc sử dụng mẫu Bộ điều hợp thông qua ví dụ sau, trong đó thiết bị trình phát âm thanh chỉ có thể phát tệp mp3 và muốn sử dụng trình phát âm thanh nâng cao có khả năng phát tệp vlc và mp4.

Thực hiện

Chúng tôi có một giao diện MediaPlayer và một AudioPlayer lớp cụ thể triển khai giao diện MediaPlayer . AudioPlayer có thể phát các tệp âm thanh định dạng mp3 theo mặc định.

Chúng tôi đang có một giao diện khác AdvancedMediaPlayer và các lớp cụ thể triển khai giao diện AdvancedMediaPlayer . Các lớp này có thể chơi các tệp định dạng vlc và mp4.

Chúng tôi cũng muốn tạo AudioPlayer để phát các định dạng khác. Để đạt được điều này, chúng tôi đã tạo một lớp bộ điều hợp MediaAdapter triển khai giao diện MediaPlayer và sử dụng các đối tượng AdvancedMediaPlayer để phát định dạng yêu cầu.

AudioPlayer sử dụng lớp bộ điều hợp MediaAdapter chuyển cho nó loại âm thanh mong muốn mà không cần biết lớp thực tế có thể phát định dạng mong muốn. AdapterPatternDemo , lớp demo của chúng tôi sẽ sử dụng lớp AudioPlayer để phát nhiều định dạng khác nhau.

Bước 1

Tạo giao diện cho Media Player và Advanced Media Player.

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);
}

Bước 2

Tạo các lớp cụ thể triển khai giao diện 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) {
      //do nothing
   }
}

Mp4Player.java

public class Mp4Player implements AdvancedMediaPlayer{

   @Override
   public void playVlc(String fileName) {
      //do nothing
   }

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

Bước 3

Tạo lớp bộ điều hợp triển khai giao diện 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);
      }
   }
}

Bước 4

Tạo lớp cụ thể triển khai giao diện MediaPlayer .

AudioPlayer.java

public class AudioPlayer implements MediaPlayer {
   MediaAdapter mediaAdapter; 

   @Override
   public void play(String audioType, String fileName) {		

      //inbuilt support to play mp3 music files
      if(audioType.equalsIgnoreCase("mp3")){
         System.out.println("Playing mp3 file. Name: " + fileName);			
      } 
      
      //mediaAdapter is providing support to play other file formats
      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");
      }
   }   
}

Bước 5

Sử dụng Trình phát âm thanh để phát các loại định dạng âm thanh khác nhau.

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

Bước 6

Xác minh kết quả đầu ra.

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