>  기사  >  백엔드 개발  >  어댑터 패턴은 무엇이며 해당 애플리케이션 시나리오는 무엇입니까?

어댑터 패턴은 무엇이며 해당 애플리케이션 시나리오는 무엇입니까?

齐天大圣
齐天大圣원래의
2020-08-05 09:47:205153검색

어댑터 패턴은 구조적 디자인 패턴이자 일반적으로 사용되는 디자인 패턴이기도 합니다.

어댑터 모드

어댑터 모드는 문자 그대로의 의미로 보면 적응에 사용된다는 것을 알고 있습니다. 그의 역할은 원래 호환되지 않는 인터페이스를 고객이 기대하는 인터페이스로 변환하여, 호환되지 않는 인터페이스로 인해 함께 작동할 수 없는 클래스가 함께 작동할 수 있도록 하는 것입니다. 일상생활의 예를 들어 설명하자면, 우리는 휴대폰 충전 포트의 종류가 다양하다는 것을 알고 있습니다. Apple과 Android에는 큰 구멍과 작은 구멍이 있습니다. 종종 휴대폰의 전원이 꺼져 충전기를 빌릴 때 발견하게 됩니다. 우리의 전화 구멍과 호환되지 않습니다. 이제 시중에는 충전기가 포함된 어댑터가 나와 있습니다. 어댑터를 사용하면 휴대폰을 충전할 수 있습니다.

어댑터에는 세 가지 역할이 있습니다: 대상 추상 클래스(Target), 어댑터(Adaptee), 어댑터(Adaptor)

클래스 어댑터 및 개체 어댑터

어댑터는 클래스 어댑터와 개체 어댑터로 구분됩니다. 설명하기 위해 예를 사용하십시오.

다음은 클래스 어댑터의 예입니다.

class ITarget
{
    function f1();
    function f2();
    function f3();
}

class Adaptee
{
    public function f1(){……};
    public function f2(){……};
    public function a(){……};
}

// 类适配器,基于继承
class Adaptor extends Adaptee
{
    public function f3 () {
        // 重新实现f3
    }
}

다음은 객체 어댑터의 예입니다.

class ITarget
{
    function f1();
    function f2();
    function f3();
}

class Adaptee
{
    public function a1(){……};
    public function b1(){……};
    public function c1(){……};
}

// 对象适配器,基于组合
class Adaptor 
{
    private $adaptee = null;
    
    public function __contrust (Adaptee $adaptee)
    {
        $this->adaptee = $adaptee;
        ……
    }
    
    public function f1() {
        $this->adaptee->a1();
    }
    
    public function f2() {
        // 重新实现f2
    }
    
    public function f3 () {
        $this->adaptee->a3();
    }
}

이 두 가지 구현 방법 중에서 어떻게 선택해야 합니까? 어댑터의 메소드 대부분을 재사용할 수 있는 경우 클래스 어댑터를 사용하도록 선택하고, 그렇지 않으면 객체 어댑터를 사용하십시오. 개체 어댑터가 더 유연합니다.

응용 시나리오

다음은 어댑터의 주요 사용 시나리오를 소개합니다

  • 결함이 있는 인터페이스 디자인의 캡슐화

  • 결제 시스템과 같은 세 가지 클래스의 인터페이스 디자인을 통합합니다. 다양한 결제 방법, WeChat 결제, Alipay 결제, 온라인 뱅킹 결제 등 세 가지 결제 구현 방법이 다릅니다. 그런 다음 어댑터 모드를 사용하여 외부 사용을 위한 통합된 방법을 사용할 수 있으므로 매우 편리합니다. 전화하다.

  • 이전 버전의 인터페이스와 호환되며 시스템 업그레이드에 자주 사용됩니다.

위 내용은 어댑터 패턴은 무엇이며 해당 애플리케이션 시나리오는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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