装飾モード
元のクラス ファイルを変更したり継承を使用したりすることなく、オブジェクトの機能を動的に拡張します。ラッピングオブジェクト、つまり装飾を作成することで、実際のオブジェクトをラッピングします。
デコレーションモードの特徴
(1) デコレーションオブジェクトは実際のオブジェクトと同じインターフェースを持ちます。このようにして、クライアント オブジェクトは実際のオブジェクトと同じ方法で装飾されたオブジェクトと対話できます。
(2) 装飾されたオブジェクトには、実際のオブジェクトへの参照が含まれています。
(3) 装飾されたオブジェクトは、クライアントからのすべてのリクエストを受け入れます。これらのリクエストを実際のオブジェクトに転送します。
(4) 装飾オブジェクトは、これらのリクエストを転送する前または後に、いくつかの追加機能を追加できます。これにより、特定のオブジェクトの構造を変更することなく、実行時に追加の機能を外部から追加できるようになります。オブジェクト指向設計では、通常、特定のクラスの機能拡張は継承を通じて実装されます。
利点
1. Decorator パターンと継承関係の目的はオブジェクトの機能を拡張することですが、Decorator は継承よりも高い柔軟性を提供できます。
2. さまざまな特定の装飾クラスと、これらの装飾クラスの順列と組み合わせを使用することにより、デザイナーはさまざまな動作の多くの組み合わせを作成できます。
欠点
1. この機能は継承よりも柔軟ですが、より複雑になることも意味します。
2. デコレーション モードを使用すると、デザイン内に多数の小さなクラスが含まれるため、多用するとプログラムが非常に複雑になります。
3. デコレーションモードは、抽象コンポーネント(Component)型プログラミング用です。ただし、特定のコンポーネント用にプログラミングしている場合は、アプリケーション アーキテクチャとデコレータが適切かどうかを再考する必要があります。もちろん、コンポーネント インターフェイスを変更したり、新しいパブリック動作を追加したり、「半透明」デコレータ モードを実装したりすることもできます。実際のプロジェクトでは最善の選択をしてください。
php コード例
要約 ワーカー クラスには作業メソッドがあり、2 つのサブクラス (配管工、大工) がワーカー インターフェイスを実装します。ここで、A 社の従業員 (水道管や大工を含む) は玄関に入るときに「こんにちは!」と挨拶する必要があるという新しい要件が発生しました。この機能を、基本クラスに影響を与えずに一律に実装したいと考えています。デコレーション モード クラスを使用して、次のことを実現できます:
interface worker{ public function doSomeWork(); } //水管工 class shuiguan implements worker{ public function doSomeWork(){ echo '修水管'; } } //木工 class mu implements worker{ public function doSomeWork(){ echo '修门窗'; } }
aWorker は、特定のワーカー オブジェクトを必要とするワーカー クラスのインターフェイスも実装します。特別な要件 (挨拶) を完了した後、元のメソッドを使用します。ワーカーオブジェクト 。デコレーションモードです!
以上がデコレーションモードの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。