어댑터 패턴에 대한 자세한 설명은 다음 글을 참고하세요. Adapter Pattern(어댑터 패턴)
어댑터 패턴의 예시: 오디오 플레이어
오디오 플레이어 장치가 mp3 파일만 재생할 수 있고, vlc 및 mp4 파일을 재생할 수 있는 고급 오디오 플레이어를 사용하고자 할 때 어댑터 패턴을 사용하여 구현해보도록 하겠습니다.
구현하려는 로직
-MediaPlayer 인터페이스와 MediaPlayer 인터페이스를 구현하는 구체적인 클래스 AudioPlayer를 만듭니다. 이때 AudioPlayer는 mp3 형식의 오디오 파일을 기본값으로 재생합니다.
-AdvancedMediaPlayer 인터페이스와 AdvancedMediaPlayer 인터페이스를 구현하는 구체적인 클래스들(vlc, mp4)을 만듭니다. 이 클래스들은 vlc와 mp4 형식의 파일을 재생할 수 있습니다.
-다른 형식의 파일을 재생하기 위한 AudioPlayer도 만들 수 있는데, MediaPlayer 인터페이스를 상속하는 MediaPlayer 어댑터 클래스를 만들고, 원하는 형식을 재생하기 위한 AdvancedMediaPlayer 객체들을 사용해야 합니다.
구현 단계
[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) {
//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
'Spring > additional' 카테고리의 다른 글
[디자인 패턴] Decorator Pattern(데코레이터 패턴) (0) | 2021.02.21 |
---|---|
[디자인 패턴] Proxy Pattern(프록시 패턴) (0) | 2021.02.21 |
[Spring]스프링이 사랑한 디자인 패턴3 (0) | 2021.02.21 |
[Spring] 스프링이 사랑한 디자인 패턴2 (0) | 2021.02.21 |
[Spring] 스프링이 사랑한 디자인 패턴1 (0) | 2021.02.17 |