デコレータ パターンは、既存のオブジェクトに機能を動的に追加できます。以下では、簡単な例を使用して、プログラム内でデコレータ パターンを使用する方法を示します。
1. デコレーターモード
あなたがガールフレンドを探していると仮定しましょう。アメリカ、中国、日本、フランスなど、さまざまな国の女の子がたくさんいます。それぞれが異なる性格や興味を持っています。プログラムでそのような状況をシミュレートする必要がある場合は、それぞれの女の子が自分のことを考えていると仮定してください。 Java クラスの場合、数千のクラスが存在するため、クラスの拡張が発生し、そのような設計のスケーラビリティは比較的低くなります。新しい女の子が必要な場合は、新しい Java クラスを作成する必要がありますが、これはプログラム開発で従う必要がある OCP (拡張にはオープン、変更にはクローズ) 原則に実際に違反するためです。
それぞれの個性や趣味が女の子の身体にダイナミックに追加できる装飾になるように、別のデザインを作成しましょう。
2. クラス図の構造
3. デコレータパターンのサンプルコード
Girl.java
public abstract class Girl { String description = "no particular"; public String getDescription(){ return description; } }
AmericanGirl.java
public class AmericanGirl extends Girl { public AmericanGirl() { description = "+American"; } }
EuropeanGirl.java
public class EuropeanGirl extends Girl { public EuropeanGirl(){ description = "+European"; } }
GirlDecorator.java
public abstract class GirlDecorator extends Girl { public abstract String getDescription(); }
Science.java
りーArt.java
public class Science extends GirlDecorator { private Girl girl; public Science(Girl girl){ this.girl = girl; } @Override public String getDescription() { return this.girl.getDescription() + "+Like Science"; } public void caltulateStuff() { System.out.println("scientific calculation!"); } }
Main.java
public class Art extends GirlDecorator { private Girl girl; public Art(Girl girl){ this.girl = girl; } @Override public String getDescription() { return this.girl.getDescription() + "+Like Art"; } public void draw() { System.out.println("draw pictures!"); } }
4. Java の JDK
IO でのデコレータ パターンの適用は、デコレータ パターンの最も典型的な使用例です。
以下は、BufferedReader オブジェクトを通じて InputStreamReader オブジェクトを装飾する簡単な例です:
public class Main { public static void main(String[] args) { //普通美国女孩 Girl g1 = new AmericanGirl(); System.out.println(g1.getDescription()); //喜欢科学的 Science g2 = new Science(g1); System.out.println(g2.getDescription()); //喜欢艺术的 Art g3 = new Art(g2); System.out.println(g3.getDescription()); } }
Java デザイン パターンの Decorator パターンの詳細な説明とコード例については、PHP 中国語 Web サイトに注目してください。