この記事では、Javaデザインパターンの装飾モードの原則と使用について説明します。次のように、参照のために共有してください。
装飾モードは、元のファイルを変更せずに継承を使用せずにオブジェクトの機能を動的に拡張できます。ラッパーオブジェクト、つまり装飾を作成することにより、実際のオブジェクトをラップします。 JDKでのIOの設計では、装飾モードを使用して、フィルタリングフローを介してノードフローをラップすることで機能を拡張できます。
装飾モードのキャラクターの構成:
abstract抽象コンポーネントの役割:処理機能を受信する準備ができているオブジェクトを標準化する抽象インターフェイスを指定します。 (inputstream、outputstream)
concreteコンポーネントの役割:追加の機能を受信するクラスを定義します。 (ノードフロー)
decoratorデコレータの役割:コンポーネントオブジェクトのインスタンスを保持し、抽象コンポーネントインターフェイスと一致するインターフェイスを実装します。 (FilterInputStream、FilterOutputStream)
concrete式デコレーターの役割:コンポーネントオブジェクトに追加の機能を追加する責任があります。 (特定の追加機能、bufferedinputStream、datainputStreamなどのフィルターフロー)
装飾的なパターンの簡単な例を次に示します。
1。要約コンポーネントの役割:インターフェイスコンポーネントを定義します
パッケージcom.tydic.decorator; //抽象コンポーネントロールパブリックインターフェイスコンポーネント{public void dosomething();}2。特定の構造の役割:抽象コンポーネントの役割を実装する必要があり、このオブジェクトに責任を追加できます。
パッケージcom.tydic.decorator;/** *コンクリートの役割構築、抽象的なロール構築 * @author管理者 * */パブリッククラスコンクリートコンポーネントはコンポーネントを実装します{@override public void dosomething(){system.out.println( "function a"); }} 3。役割を飾る:オブジェクトを保持して役割への参照を構築し、抽象的なコンポーネントの役割を実装します。 FilterInputStreamがまだ入力ストリームであり、入力ストリームの特性を備えているように、機能を追加した後にタイプを変更できないため、抽象コンポーネントの役割が実装されます。オブジェクト構築の役割への参照は、関数を追加するには、関数が添付されるコンポーネントの役割への参照を保持する必要があるためです。
パッケージcom.tydic.decorator;/***役割を飾り、コンポーネントの役割への参照を保持し、コンポーネントの役割を実装*関数を追加する場合は、コンポーネントロールを実装する必要があります。関数を追加するには、添付するコンポーネントの役割への参照を保持する必要があります。これが、コンポーネントの役割への参照を保持する必要がある理由 * @Author Administrator * */Public Class Decoratorはコンポーネントを実装します{プライベートコンポーネントコンポーネント; //これは添付されるコンポーネントロールです。 } @Override public void dosomething(){component.dosomething(); }}4.特定の装飾的な役割:装飾的な役割を継承する必要があり、添付する機能が与えられる必要があります
パッケージcom.tydic.decorator;/** *特定の装飾的な役割1については、装飾的な役割を継承する必要があり、添付する機能が与えられる必要があります * @author Administrator * */public class ConcretedeCorator1 extends Decorator {public Concretedecorator1(Component Component){Super(Component); } @Override public void dosomething(){super.dosomething(); this.doAnothing(); //渡された特定のコンポーネントロールの元の関数に基づいて関数を追加} //追加関数public void doanothing(){system.out.println( "function b"); }}パッケージcom.tydic.decorator;/** *特定の装飾的な役割2については、装飾的な役割を継承する必要があり、添付される機能には * @author Administrator * */public class concretedecorator2がデコレーターを拡張します{public concretedecorator2(Component Component){super(super); } @Override public void dosomething(){super.dosomething(); this.doanothing(); //追加関数public void doanothing(){system.out.println( "function c"); }}5.クライアントコードを書きます
パッケージcom.tydic.decorator; public class client {public static void main(string [] args){component component = new concreteComponent(); //役割コンポーネントコンポーネント2 = new ConcretedeCorator1(component); // //コンポーネントコンポーネントコンポーネントを飾る// component3.dosomething(); }}要約:
装飾モードは、組み合わせ方式を使用し、継承なしに実行時にオブジェクトを動的に展開できます。これは相続ができないことです。継承は静的であり、クラスの拡張です。
装飾モードの利点と短所:
利点: 1。オブジェクトの関数を拡張します。これは、継承よりも柔軟です。 2。さまざまな特定の装飾カテゴリとこれらの装飾カテゴリの配置と組み合わせを使用することにより、デザイナーはさまざまな動作の多くの組み合わせを作成できます。
短所:プログラムがより複雑になります。
Java関連のコンテンツを増やすために、このサイトに興味のある読者は、「Javaオブジェクト指向プログラミングに関する紹介と高度なチュートリアル」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、Java Operation domノードスキルの要約」、「Javaファイルの概要、およびJava操作スキルの概要」の概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。