デコレーターモードとは何ですか?
オブジェクトに追加の責任を動的に追加します。機能を追加するという点では、デコレーターモードはサブクラスを生成するよりも柔軟です。
1。構造
コンポーネント:これらのオブジェクトに責任を動的に追加できるオブジェクトインターフェイスを定義します。
インターフェイスコンポーネント{public void操作();} concreTeComponent:コンポーネントで定義されたインターフェイスを実装します。クラスConcreTeComponentはコンポーネントを実装します{@Override public void operation(){System.out.println( "initial Behavion"); }}デコレーター:抽象クラスを飾り、コンポーネントを継承し、コンポーネントクラスの関数を外部クラスから拡張しますが、コンポーネントの場合、デコレータの存在を知る必要はありません。
クラスデコレーターはコンポーネントを実装します{//コンポーネントオブジェクトを保持し、コンポーネント保護コンポーネントコンポーネントと集約関係を形成します。 //オブジェクトを渡して、パブリックデコレーター(コンポーネントコンポーネント){this.comPonent = component; } @Override //元のメソッドを呼び出して、public void operation(){component.operation(); }} ConcretedeCorator:特定の装飾的なオブジェクトは、コンポーネントに責任を追加する機能を再生します。
クラスconcretedecoratoraはデコレーターを拡張します{private string additsstate = "new Property 1"; public Concretedecoratora(コンポーネントコンポーネント){super(component); } public void operation(){super.operation(); system.out.println( "属性を追加:" + additstate); }} class concretedecoratorb extends decorator {public concretedecoratorb(component component){super(component); } public void operation(){super.operation(); addidbehavior(); } public void addedbehavior(){system.out.println( "behavion"); }}テストコード
public class decoratorPattern {public static void main(string [] args){component component = new ConcreTeComponent(); component.operation(); System.out.println( "==================================================================================================== ========================================================================== ========================================================================== ========================================================================== ========================================================================== ========================================================================== ========================================================================== System.out.println( "======================================================================================= }}実行結果
イニシャル行動========================================================================= ============================================================================= ============================================================================= =============================================================================
2。アプリケーションシナリオ
1. 1つのオブジェクトに動的かつ透過的に責任を追加する必要があります。つまり、他のオブジェクトには影響しません。
2。オブジェクトに関数を動的に追加する必要があり、これらの関数は動的に元に戻すことができます。
3.継承関係が非現実的になるように、いくつかの基本的な関数の配置と組み合わせによって生成される多数の関数を追加する必要があります。
4.サブクラスを生成する方法を拡張に使用できない場合。シナリオの1つは、多数の独立した拡張機能がある可能性があり、各組み合わせをサポートするために多数のサブクラスを生成し、サブクラスの数を爆発させることです。別のケースは、クラスの定義が非表示になっているか、クラス定義を使用してサブクラスを生成できないためです。
3。キーポイント
1。装飾オブジェクトと実際のオブジェクトには同じインターフェイスがあります。このようにして、クライアントオブジェクトは、実際のオブジェクトと同じ方法で装飾的なオブジェクトと対話できます。
2。装飾的なオブジェクトには、実際のオブジェクトへの参照が含まれています。
3.装飾オブジェクトは、クライアントからのすべてのリクエストを受け入れます。これらの要求を実際のオブジェクトに転送します。
4。装飾的なオブジェクトは、これらのリクエストを転送する前または後にいくつかの追加機能を追加できます。これにより、実行時に、特定のオブジェクトの構造を変更せずに、追加の機能を外部に追加できます。オブジェクト指向設計では、特定のクラスへの機能的な拡張は通常、継承によって達成されます。
上記は、Javaデコレータモードに関する関連コンテンツの紹介です。すべての人の学習に役立つことを願っています。