> 백엔드 개발 > PHP 튜토리얼 > PHP 디자인 패턴 데코레이터 패턴 코드 example_php 기술

PHP 디자인 패턴 데코레이터 패턴 코드 example_php 기술

WBOY
풀어 주다: 2016-05-16 20:16:09
원래의
959명이 탐색했습니다.

정의:

데코레이터 패턴은 원래 클래스 코드와 상속을 수정하지 않고 클래스를 동적으로 확장하는 기능입니다. 전통적인 프로그래밍 모델은 하위 클래스가 메서드 오버로드를 구현하기 위해 상위 클래스를 상속한다는 것입니다. 데코레이터 패턴을 사용하면 더 유연하고 너무 많은 클래스와 레이어를 피할 수 있는 새 데코레이터 개체만 추가하면 됩니다.

캐릭터 :

컴포넌트(장식된 객체의 기본 클래스)
ConcreteComponent(특정 장식 개체)
데코레이터(데코레이터 기본 클래스)
ContreteDecorator(콘크리트 데코레이터 클래스)

샘플 코드:

//被装饰者基类
interface Component
{
  public function operation();
}
 
//装饰者基类
abstract class Decorator implements Component
{
  protected $component;
 
  public function __construct(Component $component)
  {
    $this->component = $component;
  }
 
  public function operation()
  {
    $this->component->operation();
  }
}
 
//具体装饰者类
class ConcreteComponent implements Component
{
  public function operation()
  {
    echo 'do operation'.PHP_EOL;
  }
}
 
//具体装饰类A
class ConcreteDecoratorA extends Decorator {
  public function __construct(Component $component) {
    parent::__construct($component);
 
  }
 
  public function operation() {
    parent::operation();
    $this->addedOperationA();  // 新增加的操作
  }
 
  public function addedOperationA() {
    echo 'Add Operation A '.PHP_EOL;
  }
}
 
//具体装饰类B
class ConcreteDecoratorB extends Decorator {
  public function __construct(Component $component) {
    parent::__construct($component);
 
  }
 
  public function operation() {
    parent::operation();
    $this->addedOperationB();
  }
 
  public function addedOperationB() {
    echo 'Add Operation B '.PHP_EOL;
  }
}
 
 
class Client {
 
  public static function main() {
    /*
    do operation
    Add Operation A
    */
    $decoratorA = new ConcreteDecoratorA(new ConcreteComponent());
    $decoratorA->operation();
 
 
    /*
    do operation
    Add Operation A 
    Add Operation B 
    */
    $decoratorB = new ConcreteDecoratorB($decoratorA);
    $decoratorB->operation();
  }
 
}
 
Client::main();
로그인 후 복사

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿