>Java >java지도 시간 >Java 디자인 패턴에서 어댑터 패턴의 놀라운 사용

Java 디자인 패턴에서 어댑터 패턴의 놀라운 사용

王林
王林원래의
2024-05-09 12:54:01909검색

어댑터 패턴은 호환되지 않는 개체가 함께 작동할 수 있도록 하는 구조적 디자인 패턴으로, 개체가 원활하게 상호 작용할 수 있도록 하나의 인터페이스를 다른 인터페이스로 변환합니다. 객체 어댑터는 적응된 객체를 포함하는 어댑터 객체를 생성하고 대상 인터페이스를 구현하여 어댑터 패턴을 구현합니다. 실제 사례에서 클라이언트(예: MediaPlayer)는 어댑터 모드를 통해 고급 형식(예: VLC)의 미디어를 재생할 수 있지만 클라이언트 자체는 일반 미디어 형식(예: MP3)만 지원합니다.

Java 디자인 패턴에서 어댑터 패턴의 놀라운 사용

Java 디자인 패턴에서 어댑터 패턴의 놀라운 사용

소개

어댑터 패턴은 한 객체가 호환되지 않는 인터페이스를 가진 다른 객체와 함께 작동할 수 있도록 하는 구조적 디자인 패턴입니다. 즉, 하나의 인터페이스를 다른 인터페이스로 변환하여 호환되지 않는 두 개체가 원활하게 상호 작용할 수 있도록 합니다.

구조

어댑터 패턴의 구조는 아래와 같습니다.

                        +--------------------+
                        |       Target       |
                        +--------------------+
                                 ^
                                 |
                        +--------------------+
                        |    Adaptee(被适配) |
                        +--------------------+
                                 ^
                                 |
                  +----------------------------+
                  |  Object Adapter (对象适配器)  |
                  +----------------------------+
                             |                 |
                              \_______________/
  • Target(target): 클라이언트가 요구하는 인터페이스를 정의합니다.
  • Adaptee(adapted): 적응할 인터페이스를 정의합니다.
  • Adapter: 클라이언트가 Adaptee를 사용할 수 있도록 Adaptee 인터페이스를 Target 인터페이스로 변환합니다.

객체 어댑터

객체 어댑터는 어댑터 패턴을 구현하는 간단한 방법입니다. 이는 Adaptee 개체를 포함하고 Target 인터페이스를 구현하는 새 어댑터 개체를 생성합니다.

// Target 接口
interface Target {
    int operation();
}

// Adaptee 接口
interface Adaptee {
    int specificOperation();
}

// Adapter (对象适配器)
class Adapter implements Target {
    private final Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public int operation() {
        return adaptee.specificOperation();
    }
}

실용 사례

MediaPlayerAdvancedMediaPlayer라는 두 가지 클래스가 있다고 가정해 보겠습니다. MediaPlayer 클래스는 일반 형식(예: MP3)의 미디어 재생을 담당하고, AdvancedMediaPlayer 클래스는 고급 형식(예: VLC)의 미디어 재생을 담당합니다. 어댑터 패턴을 사용하여 MediaPlayer 클래스를 활성화하여 고급 형식 미디어를 재생할 것입니다.

class MediaPlayer {
    public void playMP3(String filename) {
        System.out.println("Playing MP3: " + filename);
    }
}

class AdvancedMediaPlayer {
    public void playVLC(String filename) {
        System.out.println("Playing VLC: " + filename);
    }
}

class MediaAdapter implements MediaPlayer {
    private final AdvancedMediaPlayer advancedMediaPlayer;

    public MediaAdapter(AdvancedMediaPlayer advancedMediaPlayer) {
        this.advancedMediaPlayer = advancedMediaPlayer;
    }

    @Override
    public void playMP3(String filename) {
        advancedMediaPlayer.playVLC(filename);
    }
}

// 客户调用
MediaPlayer audioPlayer = new MediaAdapter(new AdvancedMediaPlayer());
audioPlayer.playMP3("FileName.vlc");

출력:

Playing VLC: FileName.vlc

어댑터 패턴을 사용하여 소스 코드를 수정하지 않고도 고급 형식 미디어를 재생할 수 있도록 MediaPlayer 클래스의 기능을 확장합니다.

위 내용은 Java 디자인 패턴에서 어댑터 패턴의 놀라운 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.