PHP デザイン パターン デコレータ Pattern_PHP チュートリアル

WBOY
リリース: 2016-07-13 09:45:53
オリジナル
1021 人が閲覧しました

phpデザインパターンデコレータパターン

1.はじめに

1. デコレータモード(Decorator)はクラスの機能を動的に追加・変更することができます
2. クラスが関数を提供する場合、従来のプログラミング モデルでは、それを継承するサブクラスを作成し、クラス メソッドを再実装する必要があります
3. デコレータ モードを使用すると、実行時にデコレータ オブジェクトを追加するだけで済み、最大限の柔軟性を実現できます。

2.例

次に、PHPを使って小さなお絵かきボードの機能(指定した色のグラフィックを描く)を実装する例をあげてみましょう

1. デコレータを使用する前の従来の方法

1.お絵かきボードクラスを実装する

リーリー

2. 電話する

リーリー

3. 結果、次の四角形が表示されます

リーリー

4. 次の質問です

このグラフィックに必要な色を追加したい場合はどうすればよいですか?

5. 上記の問題を解決します (表示時に HTML コードを出力し、描画メソッドを変更すると、必要な結果が表示されます)

リーリー
; foreach ($this->data as $line) { foreach ($line as $char) { echo $char } エコー<br>
; }; }

6. 問題が再び起こります

1. このようにハードコーディングされているので、その日に色を追加したくない場合は、コードを変更するか、タイトルを追加する必要があります。 。 。需要を待って、デコレーター モードを使用して上記のコードを変更し、上記のコードを分離してみましょう。

2. デコレーターパターンを使用して上記の関数を実装します

1. デコレータ基本クラスを実装する

リーリー

2. カラーデコレータを実装する

リーリー
; } //画之后的操作 function afterDraw() { echo ; } //描画後の操作 function afterDraw() { echo
; } }

; } }

3. 描画ボードクラスを再実装します

リーリー

4. 電話する

リーリー

5.結果

緑色の長方形を出力します 同様に、太字、斜体、カスタムタイトルの設定などを使用したい場合は、特定のデコレーターを作成し、それをキャンバスに挿入するだけで実現できます

6.まとめ



1. デコレーターは、特定の操作を実行する前に、カスタマイズされた操作をいくつか追加しますcall_user_func 或者 call_user_func_array 2. デコレーターの実装は、drupal のフック機構などのフック機構に似ています

3. デコレータ メカニズムは、call_user_func
または call_user_func_array を使用して実装することもできます。これについては、drupal のフック実装を参照してください。これも非常に優れています。デザインパターンにないのでここでは紹介しませんが、時間があるときに書きます。 <p align="left"> </p> <div style="display:none;"> <span id="url" itemprop="url"> </span><span id="indexUrl" itemprop="indexUrl"></span>http://www.bkjia.com/PHPjc/1036924.html<span id="isOriginal" itemprop="isOriginal"></span>www.bkjia.com<span id="isBasedOnUrl" itemprop="isBasedOnUrl"></span>tru​​e<span id="genre" itemprop="genre"></span>http://www.bkjia.com/PHPjc/1036924.html<span id="description" itemprop="description"></span>技術記事</div> PHP デザインパターン デコレータモード 1. はじめに 1. デコレータモード (Decorator) はクラスの関数を動的に追加・変更することができます 2. クラスが提供する関数を変更・追加したい場合...<div class="art_confoot"></div> 🎜 🎜🎜
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート