>백엔드 개발 >PHP 튜토리얼 >PHP 데코레이터 패턴 사용 사례 분석

PHP 데코레이터 패턴 사용 사례 분석

php中世界最好的语言
php中世界最好的语言원래의
2018-05-19 10:06:071580검색

이번에는 PHP데코레이터 모드를 가져왔습니다사용 사례 분석, PHP 데코레이터 모드 사용 시 주의사항은 무엇인가요? 다음은 실제 사례입니다. 살펴보겠습니다.

데코레이터 모드데코레이터 모드라고도 합니다. 데코레이션 모드는 원본 클래스 파일을 변경하거나 상속을 사용하지 않고 객체의 기능을 동적으로 확장하는 것입니다. 감싸는 오브제, 즉 장식물을 생성하여 실물을 감싸는 것입니다.

UML 클래스 다이어그램:

역할:

구성 요소 개체의 인터페이스: 이러한 개체에 책임을 동적으로 추가할 수 있습니다.
모든 데코레이터의 상위 클래스 : 그래야만 해 정의됨 구성 요소 인터페이스와 일치하고 실제로 데코레이팅된 개체인 구성 요소 개체를 보유하는 인터페이스입니다.
특정 데코레이터 클래스: 데코레이팅된 객체에 추가할 특정 기능을 구현합니다. 특정 구성 요소 개체 또는 다른 특정 데코레이터 개체를 장식하는 데 사용됩니다.

특정 코드:

<?php
/**
 * Created by PhpStorm.
 * User: Jiang
 * Date: 2015/5/3
 * Time: 11:11
 */
/**组件对象接口
 * Interface IComponent
 */
interface IComponent
{
  function Display();
}
/**待装饰对象
 * Class Person
 */
class Person implements IComponent
{
  private $name;
  function construct($name)
  {
    $this->name=$name;
  }
  function Display()
  {
    echo "装扮的:{$this->name}<br/>";
  }
}
/**所有装饰器父类
 * Class Clothes
 */
class Clothes implements IComponent
{
  protected $component;
  function Decorate(IComponent $component)
  {
    $this->component=$component;
  }
  function Display()
  {
    if(!empty($this->component))
    {
      $this->component->Display();
    }
  }
}
//------------------------------具体装饰器----------------
class PiXie extends Clothes
{
  function Display()
  {
    echo "皮鞋 ";
    parent::Display();
  }
}
class QiuXie extends Clothes
{
  function Display()
  {
    echo "球鞋 ";
    parent::Display();
  }
}
class Tshirt extends Clothes
{
  function Display()
  {
    echo "T恤 ";
    parent::Display();
  }
}
class Waitao extends Clothes
{
  function Display()
  {
    echo "外套 ";
    parent::Display();
  }
}

클라이언트 테스트 코드 호출:

header("Content-Type:text/html;charset=utf-8");
//------------------------装饰器模式测试代码------------------
require_once "./Decorator/Decorator.php";
$Yaoming=new Person("姚明");
$aTai=new Person("A泰斯特");
$pixie=new PiXie();
$waitao=new Waitao();
$pixie->Decorate($Yaoming);
$waitao->Decorate($pixie);
$waitao->Display();
echo "<hr/>";
$qiuxie=new QiuXie();
$tshirt=new Tshirt();
$qiuxie->Decorate($aTai);
$tshirt->Decorate($qiuxie);
$tshirt->Display();

적용 가능한 시나리오:

1 동적으로 함수를 개체에 추가해야 하며 이러한 함수는 동적으로 취소될 수 있습니다.

2. 일부 기본 기능의 순열 및 조합으로 생성되는 매우 많은 수의 기능을 추가해야 하므로 상속 관계가 비현실적입니다.

3. 서브클래스 생성 방법을 확장에 사용할 수 없는 경우. 어떤 경우에는 독립적인 확장이 많이 있을 수 있으며, 각 조합을 지원하기 위해 많은 수의 하위 클래스가 생성되어 하위 클래스 수가 폭발적으로 증가하게 됩니다. 또 다른 경우는 클래스 정의가 숨겨져 있거나 클래스 정의를 사용하여 하위 클래스를 생성할 수 없기 때문일 수 있습니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

redis 카운터 클래스를 사용하는 단계에 대한 자세한 설명

PHP는 Windows에서 실시간 CPU 메모리 사용량을 어떻게 얻나요?

위 내용은 PHP 데코레이터 패턴 사용 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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