본문 바로가기

프로그래밍/자바 디자인 패턴

자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 어댑터 패턴

반응형

우리는 실생활에서 어댑터를 많이 사용합니다. 예를 들어, 메모리 카드 어댑터는 컴퓨터가 한 종류의 메모리 카드만 지원하고 다른 종류의 메모리카드가 컴퓨터와 호환되지 않기 때문에 메모리 카드와 컴퓨터를 연결하는 데 사용됩니다.

어댑터는 호환되지 않는 두 엔터티 사이의 변환기입니다. 그래서 어댑터 패턴은 구조 패턴입니다.

자바 디자인 패턴에서 어댑터 패턴은 호환되지 않는 두 인터페이스 사이의 다리 역할을합니다.

어댑터 패턴을 사용하여 호환되지 않는 두 인터페이스를 통합 할 수 있습니다.

예제

먼저 미디어 파일을 재생할 Player 인터페이스를 만듭니다.

MyPlayer는 어댑터이며 미디어 파일 재생의 인터페이스를 통합합니다.

interface Player {
   public void play(String type, String fileName);
}
interface AudioPlayer {  
   public void playAudio(String fileName);
}
interface VideoPlayer {  
   public void playVideo(String fileName);
}
class MyAudioPlayer implements AudioPlayer {
   @Override
   public void playAudio(String fileName) {
      System.out.println("Playing. Name: "+ fileName);    
   }
}
class MyVideoPlayer implements VideoPlayer {
   @Override
   public void playVideo(String fileName) {
      System.out.println("Playing. Name: "+ fileName);    
   }
}

class MyPlayer implements Player {

   AudioPlayer audioPlayer = new MyAudioPlayer();
   VideoPlayer videoPlayer = new MyVideoPlayer();
   
   public MyPlayer(){      
   }
   @Override
   public void play(String audioType, String fileName) {
      if(audioType.equalsIgnoreCase("avi")){
         videoPlayer.playVideo(fileName);
      }else if(audioType.equalsIgnoreCase("mp3")){
         audioPlayer.playAudio(fileName);
      }
   }
}
public class Main{
   public static void main(String[] args) {
      MyPlayer myPlayer = new MyPlayer();

      myPlayer.play("mp3", "h.mp3");
      myPlayer.play("avi", "me.avi");
   }
}

위의 코드는 다음 결과를 생성합니다.

Playing. Name: h.mp3

Playing. Name: mr.avi


반응형