>백엔드 개발 >PHP 튜토리얼 >PHP의 어댑터 패턴에 대한 자세한 분석(코드 포함)

PHP의 어댑터 패턴에 대한 자세한 분석(코드 포함)

不言
不言원래의
2018-08-10 17:19:392434검색

이 기사는 PHP의 어댑터 모드에 대한 자세한 분석을 제공합니다(코드 포함). 필요한 친구가 참고할 수 있기를 바랍니다.

어댑터 패턴(PHP 구현)

e.g.

//대상 역할

1. 인터페이스에는 여러 메소드가 있습니다

//소스 역할

1 일부 부분 메소드만 있습니다

//어댑터 역할

1 .소스 역할의 기존 메소드 호출

2. 클라이언트를 추가하고 다른 메소드가 필요하도록 조정

//Client

1. 소스 역할을 인스턴스화합니다

3. 생성자 메서드를 주입 ​​

어댑터 패턴: 한 클래스의 인터페이스를 고객이 기대하는 다른 클래스의 인터페이스로 변환합니다. 어댑터를 사용하면 원래 호환되지 않는 인터페이스가 있는 클래스가 원활하게 함께 작동할 수 있습니다.

[어댑터 패턴의 주요 역할]

Target(Target) 역할: 클라이언트가 사용하는 특정 도메인과 관련된 인터페이스를 정의하는데, 이는 우리가 기대하는 것입니다.

Source(Adaptee) 역할: 인터페이스 적응 필요

어댑터(어댑터) 역할: Adaptee 인터페이스와 대상 인터페이스를 조정합니다. 어댑터는 소스 인터페이스를 대상 인터페이스로 변환합니다.

실제로는 집 벽에 2포트 소켓(Adaptee)이 있는데 3포트가 필요한 선풍기(Target)를 구입하셨다는 뜻입니다. 이 경우 콘센트(어댑터)가 필요합니다. .

클래스 어댑터는 바람직하지 않은 높은 결합을 가져오는 "다중 상속" 구현 방법을 채택하므로 일반적으로 사용하지 않는 것이 좋습니다. 객체 어댑터는 느슨한 결합의 정신에 더 부합하는 "객체 결합" 방법을 채택합니다.

클래스 어댑터는 상속을 사용합니다

예:

/**
 * 目标角色
 */
interface Target {
 
    /**
     * 源类也有的方法1
     */
    public function sampleMethod1();
 
    /**
     * 源类没有的方法2
     */
    public function sampleMethod2();
}
 
/**
 * 源角色
 */
class Adaptee {
 
    /**
     * 源类含有的方法
     */
    public function sampleMethod1() {
        echo &#39;Adaptee sampleMethod1 <br />&#39;;
    }
}
 
/**
 * 类适配器角色
 */
class Adapter extends Adaptee implements Target {
 
    /**
     * 源类中没有sampleMethod2方法,在此补充
     */
    public function sampleMethod2() {
        echo &#39;Adapter sampleMethod2 <br />&#39;;
    }
 
}
 
class Client {
 
    /**
     * Main program.
     */
    public static function main() {
        $adapter = new Adapter();
        $adapter->sampleMethod1();
        $adapter->sampleMethod2();
 
    }
 
}

객체 어댑터는 위임을 사용합니다

e.예:

/**
 * 目标角色
 */
interface Target {
 
    /**
     * 源类也有的方法1
     */
    public function sampleMethod1();
 
    /**
     * 源类没有的方法2
     */
    public function sampleMethod2();
}
 
/**
 * 源角色
 */
class Adaptee {
 
    /**
     * 源类含有的方法
     */
    public function sampleMethod1() {
        echo &#39;Adaptee sampleMethod1 <br />&#39;;
    }
}
 
/**
 * 类适配器角色
 */
class Adapter implements Target {
 
    private $_adaptee;
 
    public function __construct(Adaptee $adaptee) {
        $this->_adaptee = $adaptee;
    }
 
    /**
     * 委派调用Adaptee的sampleMethod1方法
     */
    public function sampleMethod1() {
        $this->_adaptee->sampleMethod1();
    }
 
    /**
     * 源类中没有sampleMethod2方法,在此补充
     */
    public function sampleMethod2() {
        echo &#39;Adapter sampleMethod2 <br />&#39;;
    }
 
}
 
class Client {
 
    /**
     * Main program.
     */
    public static function main() {
        $adaptee = new Adaptee();
        $adapter = new Adapter($adaptee);
        $adapter->sampleMethod1();
        $adapter->sampleMethod2();
 
    }
 
}

관련 권장 사항:

php는 HTML 파일에 대한 클래스를 어떻게 생성합니까? PHP에서 HTML 파일 클래스를 생성하는 방법

PHP 코드를 디버깅하는 방법은 무엇입니까? PHP 코드 디버깅 방법 요약(권장)

위 내용은 PHP의 어댑터 패턴에 대한 자세한 분석(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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