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