1

SquareIconインターフェイスを実装する Java クラス ( ) がありIconます。正方形を描画し、作成時にサイズと色を選択できます。ここで、複合パターン( )を使用してクラスを作成したいと考えてCompositeIconいます。これにより、複数の異なる正方形を描くことができます。複合パターンについて読んだことがありますが、それを機能させることができないようです。

クラスにはSquareIcon、次の 3 つのメソッドがあります。

  • getIconHeight
  • getIconWidht
  • paintIcon

CompositeIconこれらもすべてクラスに入れなければなりませんよね?しかし、どうすればこれを行うことができますか?私はこれらの線に沿って何かを考えてきましたが、これが正しいかどうかはわかりません:

public int getIconWidth() {
  for (Icon i : icons) {
    i.getIconWidth();
  }
}

また、メソッドに対してこれを行う方法もわかりませんpaintIcon.4つのパラメーターが必要なため、これは機能しません。

4

1 に答える 1

4

Composite パターンは、リーフ クラスと親クラスを同じように扱います。

共通のインターフェースから始める必要があります。

public interface Icon {
    void paint();
}

Leaf は以下のインターフェースを実装します。

public class LeafIcon implements Icon {
    public void paint() { 
        // more here
    }
}

リーフの子のコレクションを持つ親も同様です。

public class ParentIcon implements Icon {
    private List<Icon> children = new ArrayList<Icon>();
    public void paint() {
        for (Icon child : children) {
            child.paint();
        }
    }
}

コードは、アイコンのコレクションを処理する必要があります。葉と親ですべての paint() メソッドを実行できます。

List<Icon> icons = new ArrayList<Icon>();
for (Icon icon : icons) {
    icon.paint();
}

コレクション内のすべての親は、その子をツリー内のリーフ ノードまで再帰的に呼び出します。

于 2012-11-24T12:22:45.840 に答える