>  기사  >  웹 프론트엔드  >  디자인 패턴 # 어댑터 패턴

디자인 패턴 # 어댑터 패턴

WBOY
WBOY원래의
2024-07-18 01:27:31984검색

Design Pattern # Adapter Pattern

지난 몇 주 동안 저는 PubSub 및 Singleton과 같은 최신 디자인 패턴 중 일부를 공유했습니다. 오늘은 이 시리즈의 기사를 하나 더 공유할 예정인데, 아래에 댓글을 달고 다음에는 어떤 디자인 패턴을 다루어야 할지 알려주세요!

어댑터 패턴

어댑터 패턴은 호환되지 않는 인터페이스를 가진 개체가 협업할 수 있도록 하는 구조적 디자인 패턴입니다. 소스 코드를 수정하지 않고도 기존 클래스가 다른 클래스와 함께 작동하도록 하려는 경우에 자주 사용됩니다. 이 패턴은 기존 클래스의 인터페이스가 필요한 인터페이스와 일치하지 않을 때 특히 유용합니다.

실제 사례 시나리오

실제 사례를 살펴보겠습니다. 귀하는 타사 비디오 플레이어를 귀하의 애플리케이션에 통합하는 임무를 맡았습니다. 그러나 비디오 플레이어는 애플리케이션이 기대하는 것과 다르게 작동하고 메서드 인터페이스도 다릅니다. 이 경우 어댑터 패턴을 사용하여 비디오 플레이어 주위에 래퍼 클래스를 생성하여 타사 코드가 기존 애플리케이션 코드와 호환되도록 할 수 있습니다.

이 경우에 사용할 코드는 다음과 같습니다.

// Adapter class
class VideoPlayerAdapter {
    constructor() {
        this.externalPlayer = new ThirdPartyVideoPlayer({
            // some configuration
        });
    }

    play() {
        const video = this.externalPlayer.getVideo();
        this.externalPlayer.playVideo(video, {
            // additional parameters
        });
    }
}

// Your application code
class Application {
    constructor() {
        this.videoPlayer = new VideoPlayerAdapter();
    }

    start() {
        // Play video using your application code
        this.videoPlayer.play();
    }
}

위의 코드를 분석해 보겠습니다.

  1. ThirdPartyVideoPlayer는 애플리케이션이 사용하려는 가상의 외부 라이브러리입니다. 그러나 인터페이스가 귀하의 애플리케이션과 호환되지 않을 수 있습니다.
  2. VideoPlayerAdapter는 어댑터 클래스입니다. ThirdPartyVideoPlayer를 둘러쌉니다. 어댑터의 인터페이스는 귀하의 애플리케이션과 호환됩니다. 어댑터의 play() 메소드가 호출되면 내부적으로 ThirdPartyVideoPlayer에 필요한 메소드가 호출됩니다.
  3. 애플리케이션은 애플리케이션 코드입니다. VideoPlayerAdapter의 인스턴스를 생성하고 이를 일반 비디오 플레이어인 것처럼 사용합니다. 어댑터에서 play() 메소드를 호출하면 어댑터는 이를 ThirdPartyVideoPlayer에 대한 적절한 호출로 변환합니다.

이렇게 하면 Application 클래스는 ThirdPartyVideoPlayer의 작동 방식에 대해 아무것도 알 필요가 없습니다. ThirdPartyVideoPlayer를 다른 라이브러리로 교체해야 하는 경우 새 어댑터만 작성하면 됩니다. Application 클래스는 동일하게 유지될 수 있습니다. 이는 어댑터 패턴의 주요 이점입니다. 즉, 애플리케이션 코드를 타사 라이브러리의 세부 사항과 분리합니다.

어댑터 패턴과 외관 패턴의 차이점

어댑터 패턴과 외관 패턴은 유사해 보이지만 서로 다른 목적으로 사용되며 서로 다른 맥락에서 사용됩니다.

  1. 목적:
    • 어댑터 패턴: 어댑터 패턴의 주요 목적은 호환되지 않는 두 인터페이스를 서로 호환되게 만드는 것입니다. 다른 인터페이스를 가진 기존 클래스를 마치 다른 인터페이스를 구현한 것처럼 사용할 수 있습니다.
    • Facade 패턴: Facade 패턴의 주요 목적은 복잡한 하위 시스템에 단순화된 인터페이스를 제공하는 것입니다. 이는 하위 시스템의 복잡성을 숨기고 하위 시스템을 더 쉽게 사용할 수 있도록 더 높은 수준의 인터페이스를 제공합니다.
  2. 사용:
    • 어댑터 패턴: 애플리케이션의 기존 클래스나 인터페이스와 일치하지 않는 새 클래스나 라이브러리를 통합해야 할 때 사용됩니다. 어댑터 패턴은 특정 인터페이스를 예상 인터페이스에 적용하는 것입니다.
    • Facade 패턴: 복잡한 하위 시스템과의 상호 작용을 단순화하려는 경우에 사용됩니다. Facade는 복잡성을 숨기고 시스템과 상호작용하는 간단한 방법을 제공합니다.
  3. 디자인:
    • 어댑터 패턴: 일반적으로 클라이언트가 기대하는 인터페이스를 구현하고 호출을 적응된 클래스로 변환하는 새 클래스(어댑터)를 생성하는 작업이 포함됩니다.
    • Facade 패턴: 클라이언트에 단순화된 메서드를 제공하는 Facade 클래스를 생성하는 작업과 관련되며 종종 하위 시스템의 여러 기능을 집계합니다.

요약하자면, 두 패턴 모두 기존 코드로 작업하는 방법을 제공하는 반면, 어댑터 패턴은 인터페이스 호환성에 초점을 맞춘 반면, Facade 패턴은 복잡한 시스템과의 상호 작용을 단순화하는 데 중점을 둡니다.

슈퍼 초대 - $5,000 획득

여기 계시는 동안 다가오는 8월 Superthis 8월에 참여하도록 초대하겠습니다!

이 원격 이벤트는 실시간 커뮤니케이션 도구를 사용하여 가상 상호 작용을 혁신하는 과제에 도전함으로써 귀하의 기술과 창의성을 선보일 수 있는 기회를 제공합니다. SuperViz를 이용하면 $5,000의 상금을 받을 수 있는 기회가 있습니다.

지금 등록하여 업데이트, 팁, 리소스를 받고 해킹에 대비하세요!

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

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