你有接口。
public interface Group {
public void assemble();
}
您有两个实现该接口的类。
public class Block implements Group {
public void assemble() {
System.out.println("Block");
}
}
public class Structure implements Group {
// Collection of child groups.
private List<Group> groups = new ArrayList<Group>();
public void assemble() {
for (Group group : groups) {
group.assemble();
}
}
// Adds the group to the structure.
public void add(Group group) {
groups.add(group);
}
// Removes the group from the structure.
public void remove(Group group) {
groups.remove(group);
}
}
创建对象后:
Structure structure = new Structure();
Structure structure1 = new Structure();
并在结构实例中填充 ArrayList:
structure1.add(new Block());
structure1.add(new Block());
你可以通过:structure.add(structure1)
但是,当您将一个 ArrayList 单独传递给另一个时,您必须使用 addAll 方法:
List<Group> groups = new ArrayList<Group>();
List<Group> groups1 = new ArrayList<Group>();
groups1.addAll(groups);
我的问题是为什么这有效?
示例来自:http: //javapapers.com/design-patterns/composite-design-pattern/