Latest web development tutorials

어댑터 모델

호환되지 않는 두 개의 인터페이스 사이의 다리 어댑터 모드 (어댑터 패턴). 디자인 패턴이 유형의 두 개의 별도의 인터페이스 기능을 겸비한 구조 모델을 속한다.

이 모델은 독립적이거나 가입 호환 인터페이스 기능을 담당하는 하나의 클래스를 포함한다. 실제 예를 들면, 메모리 카드 판독기의 어댑터와 노트북이다. 노트북에 그 독자 독자로 메모리 카드, 그래서 메모리 카드는 노트북을 통해 판독 될 수있다.

우리는 다음과 같은 예에 의해 어댑터 모드의 사용을 입증한다. 오디오 플레이어 장치는 더욱 진보 된 오디오 플레이어를 이용하여 VLC 및 MP4 파일을 재생할 수있는 MP3 파일을 재생할 수있는 것을 특징으로한다.

소개

의도 : 클라이언트가 기대하는 다른 인터페이스로 클래스의 인터페이스를 변환합니다.어댑터 패턴을 달리하기 때문에 호환되지 않는 인터페이스의 해당 클래스가 함께 작동 할 수 없습니다 함께 작동 할 수 있습니다.

새로운 환경, 새로운 환경 조건으로 "기존 개체"일부 종종 소프트웨어 시스템의 기본 용액을 상기 인터페이스는 현재 대상을 충족 할 수있다: 주로 해결한다.

사용하는 경우, 1, 시스템은 기존의 클래스의 사용을 필요로하고, 이러한 인터페이스는 시스템의 요구 사항을 충족하지 않는다.2, 클래스가 어떤 클래스의 일부는 많은 클래스의 향후 도입 서로 관련되지 않은 작업 수를 포함하여 재사용 할 수 만들려 이러한 클래스는 반드시 동일한 소스 인터페이스 없다. 3, 다른 클래스 라인에 인터페이스 변환기, 클래스를 통해. (이러한 호랑이 포함 개체, 비행 인터페이스를 구현하는 추가 어댑터에 따라 수요 기관의 증가없이 호랑이와 새, 호랑이보다도 더, 등.)

해결 방법 : 상속 또는 의존성 (권장).

키 코드 : 이미 존재 어댑터 상속 또는 종속 개체가 원하는 목표 인터페이스를 달성했다.

응용 프로그램의 예 : 1, 미국 전기 110V, 중국 220V는 220V로 110V 어댑터가 있어야합니다.2 JAVA JDK 1.1은 다음 어댑터 패턴이 필요한 시스템 열거 인터페이스 반복자 인터페이스로 변환 할 수있을 것이다 전에 1.2 JDK를 사용하려면, 열거 인터페이스를 제공하고, 1.2 반복자 인터페이스를 제공한다. 3, WINDOWS 리눅스에서 프로그램을 실행합니다. 4, JDBC에서 JAVA.

장점 : 1, 실행 모든 종류의 두 개의 관련이없는 수 있습니다.2, 클래스의 재사용을 향상시킬 수 있습니다. 3, 클래스의 투명성을 높일 수 있습니다. 4, 좋은 유연성을 제공합니다.

단점 : 어댑터의 하나, 과도하게 사용, 시스템은 매우 지저분하고 어렵게 전체를 파악한다.예를 들어, 호출이 명확 재해 동등하고, 너무 많이 일어나면, 사실, 시스템이되었다 B 내부 인터페이스를 달성하기 위해 적응하는 인터페이스를 볼 수있다. 이 필요하지 않은 경우가 있지만, 직접 재구성 시스템 어댑터를 사용할 수 없도록. 가장 JAVA 2.으로는별로 최적의 적응 적응에, 그래서 클래스를 상속 한 클래스는 추상 클래스입니다 대상으로해야합니다.

사용 시나리오 : 시스템의 인터페이스 정상 동작을 수정하는 의욕이있다가,당신은 어댑터 모드를 사용하는 것이 좋습니다.

어댑터가 될 때 상세한 설계에 추가하지 않고, 서비스 사업의 문제를 해결하기 위해 참고.

실현

우리는MediaPlayer를 인터페이스및 엔티티 클래스AudioPlayerMediaPlayer를 인터페이스의 구현이있다.기본적으로AudioPlayer는 MP3 오디오 파일 형식을 재생할 수 있습니다.

우리는 또한 다른 인터페이스AdvancedMediaPlayerAdvancedMediaPlayer인터페이스 구현 엔티티 클래스가 있습니다. 이 클래스는 파일 VLC 및 MP4 형식을 재생할 수 있습니다.

우리는AudioPlayer는다른 형식으로 오디오 파일을 재생할 수 있도록합니다. 이를 위해, 우리는MediaAdapterMediaPlayer를 인터페이스를 구현하는 어댑터 클래스를 작성하고 원하는 형식을 재생AdvancedMediaPlayer 객체를사용해야합니다.

원하는 오디오 형식을 전송MediaAdapter어댑터 클래스를 사용AudioPlayer는요구 된 오디오를 재생할 수 실제 클래스의 포맷을 알 필요가 없다.AdapterPatternDemo는AudioPlayer 클래스를 사용하여 우리의 데모 클래스는 다양한 포맷을 재생합니다.

어댑터 패턴 UML 다이어그램

1 단계

선수 및 고급 미디어 플레이어는 미디어의 인터페이스를 만들 수 있습니다.

MediaPlayer.java

공용 인터페이스의 MediaPlayer를 {
   공공 무효 플레이 (문자열 audioType, 문자열 fileName에);
}

AdvancedMediaPlayer.java

공용 인터페이스 AdvancedMediaPlayer {	
   공공 무효 playVlc (문자열 파일 이름);
   공공 무효 playMp4 (문자열 파일 이름);
}

2 단계

AdvancedMediaPlayer 인터페이스구현 엔티티 클래스를 만듭니다.

VlcPlayer.java

공용 클래스 VlcPlayer는 AdvancedMediaPlayer을 {구현
   @Override
   공공 무효 playVlc (문자열 fileName에) {
      에서 System.out.println (+ 파일 이름 "VLC 파일 이름 :를 재생");		
   }

   @Override
   공공 무효 playMp4 (문자열 파일 이름) {
      //} 아무것도하지 않습니다
}

Mp4Player.java

공용 클래스 Mp4Player는 AdvancedMediaPlayer을 {구현

   @Override
   공공 무효 playVlc (문자열 fileName에) {
      //} 아무것도하지 않습니다

   @Override
   공공 무효 playMp4 (문자열 파일 이름) {
      에서 System.out.println ( "재생 MP4 파일 이름 :."+ 파일 이름);		
   }
}

3 단계

MediaPlayer를 클래스는인터페이스 어댑터를 구현 만든다.

MediaAdapter.java

공용 클래스 MediaAdapter는 MediaPlayer를을 {구현

   AdvancedMediaPlayer advancedMusicPlayer;

   공공 MediaAdapter (문자열 audioType) {
      경우 (audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer = 새로운 VlcPlayer ();			
      } 그렇지 경우 (audioType.equalsIgnoreCase ( "MP4")) {
         advancedMusicPlayer = 새로운 Mp4Player ();
      }	
   }

   @Override
   공공 무효 플레이 (문자열 audioType, 문자열 파일 이름) {
      경우 (audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer.playVlc (파일 이름);
      } 그렇지 경우 (audioType.equalsIgnoreCase ( "MP4")) {
         advancedMusicPlayer.playMp4 (파일 이름);
      }
   }
}

4 단계

MediaPlayer를 인터페이스실현 엔티티 클래스를 만듭니다.

AudioPlayer.java

공용 클래스 AudioPlayer는 MediaPlayer를을 {구현
   MediaAdapter mediaAdapter; 

   @Override
   공공 무효 플레이 (문자열 audioType, 문자열 파일 이름) {		

      // {내장 지원하는 경우 (audioType.equalsIgnoreCase ( "MP3")), MP3 음악 파일을 재생합니다
         에서 System.out.println ( "재생 MP3 파일 이름 :."+ 파일 이름);			
      } 
      // MediaAdapter이 경우 다른 지원하는 다른 파일 형식을 재생할 제공 (audioType.equalsIgnoreCase ( "VLC") 
         || AudioType.equalsIgnoreCase ( "MP4")) {
         mediaAdapter = 새로운 MediaAdapter (audioType);
         mediaAdapter.play (audioType, fileName에);
      }
      다른 {
         에서 System.out.println ( "잘못된 미디어."+
            audioType +) "형식은 지원되지 않습니다";
      }
   }   
}

5 단계

AudioPlayer는 오디오 포맷의 다른 유형을 재생하기 위해 사용합니다.

AdapterPatternDemo.java

공용 클래스 AdapterPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {
      AudioPlayer audioPlayer = 새로운 AudioPlayer ();

      (이하 "horizon.mp3 넘어" "MP3") audioPlayer.play;
      audioPlayer.play ( "MP4", "alone.mp4");
      audioPlayer.play ( "VLC", "지금까지 away.vlc");
      audioPlayer.play ( "아비", "마음 me.avi");
   }
}

6 단계

출력을 확인합니다.

horizon.mp3 외에도 MP3 파일 이름 :를 재생
재생 MP4 파일 이름 :. Alone.mp4
VLC 파일 이름을 재생 :.까지 away.vlc 파
잘못된 미디어. AVI 형식은 지원되지 않습니다