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

高洛峰
リリース: 2017-01-19 15:48:49
オリジナル
1188 人が閲覧しました

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

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!