>  기사  >  백엔드 개발  >  PHP 위임 모드에 대한 자세한 설명 및 사례

PHP 위임 모드에 대한 자세한 설명 및 사례

墨辰丷
墨辰丷원래의
2018-05-16 14:07:121158검색

이 글은 주로 PHP 위임 모드에 대한 자세한 설명과 사례를 소개하고 있으니 관심 있는 친구들이 참고하시면 좋을 것 같습니다.

위임 패턴

다른 객체에 할당하거나 위임함으로써 위임 디자인 패턴은 핵심 객체에서 결정과 복잡한 기능을 제거합니다.

응용 시나리오

1. mp3 재생 모드와 mp4 재생 모드가 있는 CD 클래스를 설계했습니다

2. 개선 전 CD 클래스의 재생 모드를 사용할 때 인스턴스화된 클래스에서 무엇을 선택할지 판단해야 합니다. 메소드의 재생 모드

3. 개선 후 재생 모드가 playList 함수에 매개변수로 전달되어 해당 재생 모드를 자동으로 찾을 수 있습니다.

코드: CD 클래스, 개선 전 재생 모드 선택이 번거롭다

<?php  
//委托模式-去除核心对象中的判决和复杂的功能性  
//使用委托模式之前,调用cd类,选择cd播放模式是复杂的选择过程  
class cd {  
    protected $cdInfo = array();   
      
    public function addSong($song) {  
        $this->cdInfo[$song] = $song;  
    }  
      
    public function playMp3($song) {  
        return $this->cdInfo[$song] . &#39;.mp3&#39;;  
    }  
      
    public function playMp4($song) {  
        return $this->cdInfo[$song] . &#39;.mp4&#39;;  
    }  
}  
$oldCd = new cd;  
$oldCd->addSong("1");  
$oldCd->addSong("2");  
$oldCd->addSong("3");  
$type = &#39;mp3&#39;;  
if ($type == &#39;mp3&#39;) {  
    $oldCd->playMp3();  
} else {  
    $oldCd->playMp4();  
}

코드: 위임 모드를 통해 개선된 CD 클래스

<?php  
//委托模式-去除核心对象中的判决和复杂的功能性  
//改进cd类  
class cdDelegate {  
    protected $cdInfo = array();   
      
    public function addSong($song) {  
        $this->cdInfo[$song] = $song;  
    }  
      
    public function play($type, $song) {  
        $obj = new $type;  
        return $obj->playList($this->cdInfo, $song);  
    }  
}  
  
class mp3 {  
    public function playList($list) {  
        return $list[$song];  
    }  
}  
  
class mp4 {  
    public function playList($list) {  
        return $list[$song];  
    }  
}  
  
$newCd = new cd;  
$newCd->addSong("1");  
$newCd->addSong("2");  
$newCd->addSong("3");  
$type = &#39;mp3&#39;;  
$oldCd->play(&#39;mp3&#39;, &#39;1&#39;); //只要传递参数就能知道需要选择何种播放模式

관련 권장 사항:

PHP의 위임 모드 예제 튜토리얼

PHP 고급 객체 지향 디자인 패턴: 위임 패턴 사용 예

PHP 디자인 패턴의 위임 패턴

위 내용은 PHP 위임 모드에 대한 자세한 설명 및 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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