>백엔드 개발 >PHP 튜토리얼 >PHP 디자인 패턴 중 어댑터 패턴에 대한 자세한 설명

PHP 디자인 패턴 중 어댑터 패턴에 대한 자세한 설명

韦小宝
韦小宝원래의
2017-11-15 10:49:521698검색

특정 유사한 클래스에 대한 작업을 통합된 "인터페이스"(여기서는 비유임) - Adapter로 변환하거나 비유적으로는 해당 클래스의 세부 사항을 통합하거나 보호하는 "인터페이스"로 변환합니다. Adapter 패턴은 또한 Adapter와 상호 작용하는 코드를 수정하지 않고도 "적응형" 클래스를 쉽게 추가하거나 삭제할 수 있도록 "메커니즘"을 구성합니다. 이는 "코드 간 결합 감소"라는 설계 원칙에 부합합니다

PHP 디자인 패턴 중 어댑터 패턴에 대한 자세한 설명

<?php
/*
 * 适配器模式
 */
abstract class Toy
{
    public abstract function openMouth();

    public abstract function closeMouth();
}

class Dog extends Toy
{
    public function openMouth()
    {
        echo "Dog open Mouth\n";
    }

    public function closeMouth()
    {
        echo "Dog close Mouth\n";
    }
}

class Cat extends Toy
{
    public function openMouth()
    {
        echo "Cat open Mouth\n";
    }

    public function closeMouth()
    {
        echo "Cat close Mouth\n";
    }
}


//目标角色:红枣遥控公司
interface RedTarget
{
    public function doMouthOpen();

    public function doMouthClose();
}

//目标角色:绿枣遥控公司及
interface GreenTarget
{
    public function operateMouth($type = 0);
}


//类适配器角色:红枣遥控公司
class RedAdapter implements RedTarget
{
    private $adaptee;

    function __construct(Toy $adaptee)
    {
        $this->adaptee = $adaptee;
    }

    //委派调用Adaptee的sampleMethod1方法
    public function doMouthOpen()
    {
        $this->adaptee->openMouth();
    }

    public function doMouthClose()
    {
        $this->adaptee->closeMouth();
    }
}

//类适配器角色:绿枣遥控公司
class GreenAdapter implements GreenTarget
{
    private $adaptee;

    function __construct(Toy $adaptee)
    {
        $this->adaptee = $adaptee;
    }

    //委派调用Adaptee:GreenTarget的operateMouth方法
    public function operateMouth($type = 0)
    {
        if ($type) {
            $this->adaptee->openMouth();
        } else {
            $this->adaptee->closeMouth();
        }
    }
}


class testDriver //客户端,客户想要那种就实现那种
{
    public function run()
    {
        //实例化一只狗玩具
        $adaptee_dog = new Dog();
        echo "没有适配器的普通模式";
        $adaptee_dog->openMouth();
        $adaptee_dog->closeMouth();
        echo "给狗套上红枣适配器\n";
        $adapter_red = new RedAdapter($adaptee_dog);
        //张嘴
        $adapter_red->doMouthOpen();
        //闭嘴
        $adapter_red->doMouthClose();
        echo "给狗套上绿枣适配器\n";
        $adapter_green = new GreenAdapter($adaptee_dog);
        //张嘴
        $adapter_green->operateMouth(1);
        //闭嘴
        $adapter_green->operateMouth(0);
    }
}

$test = new testDriver();
$test->run();

어댑터 패턴은 기존 인터페이스를 클라이언트 클래스에서 예상하는 인터페이스로 변환하여 기존 클래스의 재사용을 실현합니다. 매우 자주 사용되는 디자인 패턴입니다.

관련 권장 사항:

PHP 어댑터 소개 mode

PHP 어댑터 등의 적응 코드 분석 모드

PHP 어댑터 모드 소개_PHP 튜토리얼

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

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