ホームページ >Java >&#&チュートリアル >Java デザイン パターン デコレータ パターンの詳細な説明とコード例

Java デザイン パターン デコレータ パターンの詳細な説明とコード例

高洛峰
高洛峰オリジナル
2017-01-19 15:48:491205ブラウズ

デコレータ パターンは、既存のオブジェクトに機能を動的に追加できます。以下では、簡単な例を使用して、プログラム内でデコレータ パターンを使用する方法を示します。

1. デコレーターモード

あなたがガールフレンドを探していると仮定しましょう。アメリカ、中国、日本、フランスなど、さまざまな国の女の子がたくさんいます。それぞれが異なる性格や興味を持っています。プログラムでそのような状況をシミュレートする必要がある場合は、それぞれの女の子が自分のことを考えていると仮定してください。 Java クラスの場合、数千のクラスが存在するため、クラスの拡張が発生し、そのような設計のスケーラビリティは比較的低くなります。新しい女の子が必要な場合は、新しい Java クラスを作成する必要がありますが、これはプログラム開発で従う必要がある OCP (拡張にはオープン、変更にはクローズ) 原則に実際に違反するためです。
それぞれの個性や趣味が女の子の身体にダイナミックに追加できる装飾になるように、別のデザインを作成しましょう。

2. クラス図の構造

Java デザイン パターン デコレータ パターンの詳細な説明とコード例

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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。