Adapter
Adapter ํจํด์ ๊ธฐ์กด ํด๋์ค(๋๋ ๊ฐ์ฒด)๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์๊ตฌํ๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ณํํด์ฃผ๋ ๊ตฌ์กฐ์ ๋์์ธ ํจํด์ ๋๋ค.
Client
โ
โผ
[Target]
โฒ
โ
[Adapter] โโโโโ [Adaptee]
์ฆ, ๊ธฐ์กด ํด๋์ค์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ๋ํ๋ ๋ฐฉ์์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ง์ถฐ์ฃผ์ด, ๋ ์์คํ ๊ฐ์ ํธํ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
ํ๊ฒ(Target): ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ ๋๋ค.
์ด๋ํฐ(Adaptee): ๊ธฐ์กด์ ์กด์ฌํ๋, ์ํ๋ ์ธํฐํ์ด์ค์ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ํด๋์ค์ ๋๋ค.
์ด๋ํฐ(Adapter): ์ด๋ํฐ์ ์ธํฐํ์ด์ค๋ฅผ ํ๊ฒ ์ธํฐํ์ด์ค๋ก ๋ณํํ๋ ํด๋์ค์ ๋๋ค.
How do code
// Target ์ธํฐํ์ด์ค: ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ธํฐํ์ด์ค
public interface MediaPlayer {
void play(String audioType, String fileName);
}
// Adaptee ํด๋์ค: ๊ธฐ์กด์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ํด๋์ค
public class AdvancedMediaPlayer {
public void playVlc(String fileName) {
System.out.println("Playing vlc file. Name: " + fileName);
}
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: " + fileName);
}
}
// Adapter ํด๋์ค: Adaptee์ ๊ธฐ๋ฅ์ Target ์ธํฐํ์ด์ค๋ก ๋ณํํฉ๋๋ค.
public class MediaAdapter implements MediaPlayer {
private AdvancedMediaPlayer advancedMediaPlayer;
public MediaAdapter(String audioType) {
advancedMediaPlayer = new AdvancedMediaPlayer();
}
@Override
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("vlc")) {
advancedMediaPlayer.playVlc(fileName);
} else if(audioType.equalsIgnoreCase("mp4")) {
advancedMediaPlayer.playMp4(fileName);
}
}
}
// AudioPlayer๋ Target ์ธํฐํ์ด์ค(MediaPlayer)๋ฅผ ๊ตฌํํ์ฌ ์ฌ์ฉํฉ๋๋ค.
public class AudioPlayer implements MediaPlayer {
private MediaAdapter mediaAdapter;
@Override
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp3")) {
System.out.println("Playing mp3 file. Name: " + fileName);
} 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.");
}
}
}
Last updated