1

我有一个SquareIcon实现Icon接口的 Java 类 ()。它绘制一个正方形,您可以在创建正方形时选择其大小和颜色。我现在想使用复合模式( CompositeIcon) 编写一个类,它可以让一个人绘制几个不同的正方形。我已经阅读了有关复合模式的信息,但我似乎无法让它发挥作用。

SquareIcon课堂上,我有以下三种方法:

  • getIconHeight
  • getIconWidht
  • paintIcon

我也必须把所有这些都放在CompositeIcon课堂上,对吧?但是我该怎么做呢?我一直在考虑这些方面的事情,但我不知道这是否正确:

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

我也不知道如何为该paintIcon方法执行此操作,因为它需要 4 个参数,这意味着这不起作用。

4

1 回答 1

4

复合模式将叶类和父类视为相同。

您必须从一个通用接口开始:

public interface Icon {
    void paint();
}

Leaf实现了接口:

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

Parent 也是如此,它有一个 Leaf 孩子的集合:

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 回答