Mẫu này bao gồm một lớp duy nhất chịu trách nhiệm kết hợp 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à 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 để có thể đọc được thẻ nhớ qua laptop.
Chúng tôi đang minh họa việc sử dụng mẫu Bộ điều hợp thông qua ví dụ sau, trong đó thiết bị 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.
Chúng tôi có giao diện MediaPlayer và lớp cụ thể AudioPlayer 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ể phát các tệp định dạng vlc và mp4.
Chúng tôi muốn làm cho AudioPlayer có thể 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 được yêu cầu.
AudioPlayer sử dụng lớp bộ điều hợp MediaAdapter truyề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. AdaptorPatternDemo, lớp demo của chúng tôi sẽ sử dụng lớp AudioPlayer để phát các đị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ể implementing đến AdvancedMediaPlayer Interface.
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 adapter để implements đến MediaPlayer interface.
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 Create concrete để implementing đến MediaPlayer interface.
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 AudioPlayer để chơi các định dạng audio 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.
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
» Tin mới nhất:
» Các tin khác: