UML类图
使用场景
多叉树的实现,如文件夹-文件,公司组织架构等。
需要对结点有较高的抽象性能,如果结点之间属性有较多不同,则难以实现组合模式。
代码实现
public abstract class Component {
protected String name;
public Component(String name){
this.name = name;
}
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract void display(int depth);
}
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component{
private List<Component> children = new ArrayList<Component>();
public Composite(String name) {
super(name);
}
@Override
public void add(Component c) {
children.add(c);
}
@Override
public void remove(Component c) {
children.remove(c);
}
@Override
public void display(int depth) {
String temp = "";
for (int i = 0; i < depth; i++) {
temp+= "-";
}
System.out.println(temp + this.name);
for (Component component : children) {
component.display(depth + 1);
}
}
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void add(Component c) {}
@Override
public void remove(Component c) {}
@Override
public void display(int depth) {
String temp = "";
for (int i = 0; i < depth; i++) {
temp+= "-";
}
System.out.println(temp + this.name);
}
}
public class Client {
public static void main(String[] args) {
Component root = new Composite("a");
Component b = new Composite("b");
Component c = new Composite("c");
Component d = new Leaf("d");
Component e = new Leaf("e");
b.add(d);
b.add(e);
root.add(b);
root.add(c);
root.display(1);
}
}