English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaデコレータパターンの初探

この記事では、Javaで実装する簡単な装饰器デザインパターンについて紹介します:

まず、装饰器デザインパターンのクラス図を見てみましょう:


図から見て、Componentインターフェースのどの実装クラスにも装飾することができ、これらの実装クラスには装饰器自体も含まれ、装饰器自体も再び装饰することができます。

以下是用Java实现的简单の装饰器デザインパターンです。基本的なコーヒーを加えることに始まり、ミルク、チョコレート、砂糖を加える装饰器システムが提供されます。

interface Component {
  void method();
}
class Coffee implements Component {
  @Override
  public void method() {
    // TODO Auto-generated method stub
    System.out.println("倒入咖啡");
  }
}
class Decorator implements Component {
  public Component comp;
  public Decorator(Component comp) {
    this.comp = comp;
  }
  @Override
  public void method() {
    // TODO Auto-generated method stub
    comp.method();
  }
}
class ConcreteDecorateA extends Decorator {
  public Component comp;
  public ConcreteDecorateA(Component comp) {
    super(comp);
    this.comp = comp;
  }
  public void method1() {
    System.out.println("倒入牛奶");
  }
  public void method2() {
    System.out.println("加入糖 ");
  }
  public void method() {
    super.method();
    method1();
    method2();
  }
}
class ConcreteDecorateB extends Decorator {
  public Component comp;
  public ConcreteDecorateB(Component comp) {
    super(comp);
    this.comp = comp;
  }
  public void method1() {
    System.out.println("チョコレートを加える");
  }
  public void method() {
    super.method();
    method1();
  }
}
public class TestDecoratePattern {
  public static void main(String[] args) {
    Component comp = new Coffee();
    comp.method();
    System.out.println("--------------------------------------------------");
    Component comp1 = new ConcreteDecorateA(comp);
    comp1.method();
    System.out.println("--------------------------------------------------");
    Component comp2 = new ConcreteDecorateB(comp1);
    comp2.method();
    System.out.println("--------------------------------------------------");
    Component comp3 = new ConcreteDecorateB(new ConcreteDecorateA(new Coffee()));
    comp3.method();
    System.out.println("--------------------------------------------------");
    Component comp4 = new ConcreteDecorateA(new ConcreteDecorateB(new Coffee()));
    comp4.method();
  }
}

実行結果:

これで本文のすべての内容が終わりました。皆様の学習に役立つことを願っています。また、呐喊ツアーを多くのサポートをお願いします。

声明:本文の内容はインターネットから収集され、著作権者によって所有されています。インターネットユーザーが自発的に貢献し、アップロードした内容であり、本サイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害を疑う内容がある場合は、以下のメールアドレスにご連絡ください:notice#oldtoolbag.com(メール送信時は、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとりたいと、本サイトは即座に侵害する疑いのあるコンテンツを削除します。)

おすすめ