デコレータ デザイン パターン
デコレータ パターンは、既存の構造に装飾を追加するパターンです。デコレーション モードは、元のクラス ファイルを変更したり継承を使用したりすることなく、オブジェクトの機能を動的に拡張します。ラッピングオブジェクト、つまり装飾を作成することで、実際のオブジェクトをラッピングします。
基本的に、他のオブジェクトに影響を与えずに既存のオブジェクトに新しい機能を追加したい場合は、デコレータ パターンを使用できます。
<?php namespace Test;abstract class Component{ abstract public function operation(); }
<?phpnamespace Test;abstract class Decorator extends Component{ protected $component; public function __construct(Component $component) { $this->component = $component; } public function operation() { $this->component->operation(); } abstract public function before(); abstract public function after();}
<?phpnamespace Test;class ConcreteComponent extends Component{ public function operation() { echo "hello world!!!!"; }}
<?phpnamespace Test;class ConcreteDecoratorA extends Decorator{ public function __construct(Component $component) { parent::__construct($component); } public function operation() { $this->before(); parent::operation(); $this->after(); } public function before() { // TODO: Implement before() method. echo "before!!!"; } public function after() { // TODO: Implement after() method. echo "after!!!"; }}
<?phpnamespace Test;class Client{ /** * */ public static function main() { $decoratorA = new ConcreteDecoratorA(new ConcreteComponent()); $decoratorA->operation(); $decoratorB=new ConcreteDecoratorA($decoratorA); $decoratorB->operation(); }}
before!!!hello world!!!!after!!!before!!!before!!!hello world!!!!after!!!after!!!