この記事では、主に PHP デザイン パターン デコレーター パターン コード例を紹介します。 デコレーター パターンは、元のクラスのコードと継承を変更せずにクラスを動的に拡張する機能です。必要な友達はそれを参照できます
定義:
デコレーターパターンとは、元のクラスのコードや継承を変更することなく、クラスを動的に拡張する機能です。従来のプログラミング モデルでは、サブクラスが親クラスを継承してメソッドのオーバーロードを実装します。デコレータ パターンを使用すると、新しいデコレータ オブジェクトを追加するだけで済みます。これにより、より柔軟で、過剰なクラスや層を回避できます。
キャラクター:
コンポーネント(装飾されたオブジェクトの基本クラス)
ConcreteComponent(特定の装飾オブジェクト)
デコレータ(デコレータ基本クラス)
ContreteDecorator (特定のデコレータクラス)
サンプルコード:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
//デコレータ基本クラス インターフェースコンポーネント { パブリック関数操作(); }
//デコレータ基本クラス 抽象クラス Decorator がコンポーネントを実装します { 保護された $component;
パブリック関数 __construct(Component $component) { $this->component = $component; }
パブリック関数操作() { $this->コンポーネント->operation(); } }
//コンクリートデコレータークラス クラス ConcreteComponent はコンポーネントを実装します { パブリック関数操作() { echo '操作を実行'.PHP_EOL; } }
//特定装飾カテゴリA クラス ConcreteDecoratorA は Decorator を拡張します { パブリック関数 __construct(Component $component) { 親::__construct($component);
}
パブリック関数操作() { 親::操作(); $this->addedOperationA() // 新しく追加されたオペレーション ;}
パブリック関数 addedOperationA() { echo '追加オペレーション A '.PHP_EOL; } }
//特定装飾タイプB クラス ConcreteDecoratorB は Decorator を拡張します { パブリック関数 __construct(Component $component) { 親::__construct($component);
}
パブリック関数操作() { 親::操作(); $this->addedOperationB(); }
パブリック関数 addedOperationB() { echo '追加オペレーション B '.PHP_EOL; } }
クラスクライアント{
パブリック静的関数 main() { /* 操作を行う オペレーションAを追加 */ $decoratorA = new ConcreteDecoratorA(new ConcreteComponent()); $decoratorA->operation();
/* 操作を行う オペレーションAを追加 オペレーションBを追加 */ $decoratorB = 新しい ConcreteDecoratorB($decoratorA); $decoratorB->operation(); }
}
クライアント::メイン(); |