首頁  >  文章  >  後端開發  >  簡述PHP設計模式中的裝飾者模式

簡述PHP設計模式中的裝飾者模式

墨辰丷
墨辰丷原創
2018-06-11 09:55:001790瀏覽

這篇文章主要簡述PHP設計模式中的裝飾者模式,有興趣的朋友參考下,希望對大家有幫助。

定義:

裝飾模式就是在不修改原始類別程式碼和繼承的情況下動態擴充類別的功能。傳統的程式模式都是子類別繼承父類別實作方法重載,使用裝飾器模式,只需新增一個新的裝飾器對象,更靈活,避免類別數量和層次過多。

角色:

Component(被裝飾物件基底類別)
ConcreteComponent(具體被裝飾物件)
Decorator(裝飾者基底類別)
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操作MySQL資料庫及session對話的方法

php常用的三種遍歷樹的技巧

php實作mysql資料庫分卷備份

#

以上是簡述PHP設計模式中的裝飾者模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn