รูปแบบการออกแบบ - รูปแบบอะแดปเตอร์

รูปแบบอะแดปเตอร์ทำงานเป็นสะพานเชื่อมระหว่างสองอินเทอร์เฟซที่เข้ากันไม่ได้ รูปแบบการออกแบบประเภทนี้อยู่ภายใต้รูปแบบโครงสร้างเนื่องจากรูปแบบนี้รวมความสามารถของสองอินเทอร์เฟซที่เป็นอิสระ

รูปแบบนี้เกี่ยวข้องกับคลาสเดียวซึ่งมีหน้าที่ในการรวมฟังก์ชันของอินเทอร์เฟซที่เป็นอิสระหรือเข้ากันไม่ได้ ตัวอย่างชีวิตจริงอาจเป็นกรณีของเครื่องอ่านการ์ดซึ่งทำหน้าที่เป็นอะแดปเตอร์ระหว่างการ์ดหน่วยความจำและแล็ปท็อป คุณเสียบการ์ดหน่วยความจำเข้ากับเครื่องอ่านการ์ดและเครื่องอ่านการ์ดในแล็ปท็อปเพื่อให้การ์ดหน่วยความจำสามารถอ่านผ่านแล็ปท็อปได้

เรากำลังสาธิตการใช้รูปแบบอะแดปเตอร์ผ่านตัวอย่างต่อไปนี้ซึ่งอุปกรณ์เครื่องเล่นเสียงสามารถเล่นไฟล์ mp3 ได้เท่านั้นและต้องการใช้เครื่องเล่นเสียงขั้นสูงที่สามารถเล่นไฟล์ vlc และ mp4 ได้

การนำไปใช้

เรามีอินเทอร์เฟซMediaPlayerและAudioPlayerระดับคอนกรีตที่ใช้อินเทอร์เฟซMediaPlayer AudioPlayerสามารถเล่นไฟล์เสียงรูปแบบ mp3 ได้ตามค่าเริ่มต้น

เรากำลังมีอินเทอร์เฟซAdvancedMediaPlayerและคลาสคอนกรีตที่ใช้อินเทอร์เฟซAdvancedMediaPlayer คลาสเหล่านี้สามารถเล่นไฟล์รูปแบบ vlc และ mp4 ได้

เราต้องการให้AudioPlayerเล่นรูปแบบอื่น ๆ ด้วย เพื่อให้บรรลุสิ่งนี้เราได้สร้างคลาสอะแด็ปเตอร์MediaAdapterซึ่งใช้อินเตอร์เฟสMediaPlayerและใช้ออบเจ็กต์AdvancedMediaPlayerเพื่อเล่นรูปแบบที่ต้องการ

AudioPlayerใช้คลาสอะแดปเตอร์MediaAdapterส่งผ่านประเภทเสียงที่ต้องการโดยไม่ทราบคลาสจริงซึ่งสามารถเล่นรูปแบบที่ต้องการได้ AdapterPatternDemoคลาสสาธิตของเราจะใช้คลาสAudioPlayerเพื่อเล่นรูปแบบต่างๆ

ขั้นตอนที่ 1

สร้างอินเทอร์เฟซสำหรับ Media Player และ 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);
}

ขั้นตอนที่ 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) {
      //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);		
   }
}

ขั้นตอนที่ 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) {		

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

ขั้นตอนที่ 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