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.");
}
}
}
/// Target ์ธํฐํ์ด์ค
interface MediaPlayer {
fun play(audioType: String, fileName: String)
}
// Adaptee ํด๋์ค
class AdvancedMediaPlayer {
fun playVlc(fileName: String) {
println("Playing vlc file. Name: $fileName")
}
fun playMp4(fileName: String) {
println("Playing mp4 file. Name: $fileName")
}
}
// Adapter ํด๋์ค
class MediaAdapter(private val audioType: String) : MediaPlayer {
private val advancedMediaPlayer = AdvancedMediaPlayer()
override fun play(audioType: String, fileName: String) {
when (audioType.lowercase()) {
"vlc" -> advancedMediaPlayer.playVlc(fileName)
"mp4" -> advancedMediaPlayer.playMp4(fileName)
}
}
}
class AudioPlayer : MediaPlayer {
private var mediaAdapter: MediaAdapter? = null
override fun play(audioType: String, fileName: String) {
when (audioType.lowercase()) {
"mp3" -> println("Playing mp3 file. Name: $fileName")
"vlc", "mp4" -> {
mediaAdapter = MediaAdapter(audioType)
mediaAdapter?.play(audioType, fileName)
}
else -> println("Invalid media. $audioType format not supported.")
}
}
}Last updated