Design Pattern

Adapter

Jungsoomin :) 2020. 11. 23. 20:39

호환되지 않는 인터페이스적응시켜 사용가능하도록 하는 방법이다.

 

이게 무슨 소린가 한참 생각해 봤는데 그러는 것보다 직접 코드 쳐서 이해하는게 빠르다는 것을 꺠달았다.


주목해야할 특징

  • Adapter 클래스클라이언트가 사용할 타입을 상속한다.
  • 멤버변수로 적응시킬 인터페이스를 선언한다.
  • Adapter 가 상속한 타입을 재정의하는 과정에서 멤버변수의 메서드를 호출한다.
  • 결국 , 클라이언트가 원하는 인터페이스를 호출할 수 있지만, 기능은 적응시킬 인터페이스의 기능이 호출된다.

MediaPackage -> MediaPlayer 로 적응시키는 모습

FormatAdapterMediaPlayer 로 프로모션 되어 사용되어질 수 있으며, 내부 메서드 호출은 MediaPackage 의 기능으로 호출된다.

public interface MediaPlayer {

    void play(String fileName);
}

public class MP3 implements MediaPlayer {
    @Override
    public void play(String fileName) {
        System.out.println("Playing MP3 : "+fileName);
    }
}

//MediaPackage
public interface MediaPackage {

    void playFile(String fileName);
}

public class MP4 implements MediaPackage {
    @Override
    public void playFile(String fileName) {
        System.out.println("Playing MP4 File : "+fileName);
    }
}

// 인터페이스를 요구사항에 맞게 사용하기 위한 Adapter
public class FormatAdapter implements MediaPlayer {

    private MediaPackage mediaPackage;

    public MediaPackage getMediaPackage() {
        return mediaPackage;
    }

    public FormatAdapter(MediaPackage mediaPackage) {
        this.mediaPackage = mediaPackage;
    }

    @Override
    public void play(String fileName) {
        System.out.print("Using Adapter ---> ");
        mediaPackage.playFile(fileName);
    }
}

//호출되는 메인 메서드
public class Main {
    public static void main(String[] args) {
        MediaPlayer mp3 = new MP3();
        mp3.play("벚꽃엔딩.mp3");
        MediaPackage mp4 = new MP4();
        mp4.playFile("흔들리는 꽃들 속에서 너의 샴푸향이 느껴진거야.mp4");

        // mp4 -> mp3
        // 구현으로 인하여 MediaPlayer 를 쓰고 있으나 사용하는 것은 MediaPackage 이다.
        // Client 에서 MediaPlayer Type 을 호출한다고해도 MediaPackage 의 기능을 사용할 수 있게 된다.
        MediaPlayer formatAdapter = new FormatAdapter(new MP4());
        formatAdapter.play("당신과는 천천히.mp4");
    }
}

//로깅
Playing MP3 : 벚꽃엔딩.mp3
Playing MP4 File : 흔들리는 꽃들 속에서 너의 샴푸향이 느껴진거야.mp4
Using Adapter ---> Playing MP4 File : 당신과는 천천히.mp4

'Design Pattern' 카테고리의 다른 글

Prototype  (0) 2020.11.29
SingleTon Pattern  (0) 2020.11.24
Factory Method  (0) 2020.11.24
Template Method  (0) 2020.11.23
Strategy  (0) 2020.11.23