Composite模式是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。它使得用户对单个对象和组合对象的使用具有一致性。
1. 组件:Composite模式中的组件可以是叶子节点,也可以是容器节点,叶子节点不能再包含子节点,而容器节点可以包含子节点。
2. 抽象类:在Composite模式中,抽象类是定义组件的接口,并提供了添加、删除和获取子节点的方法,这些方法可以递归调用,以实现树形结构的遍历。
3. 叶子节点:叶子节点是没有子节点的节点,它实现了在抽象类中定义的方法,但是这些方法的实现都是空的。
4. 容器节点:容器节点是可以包含子节点的节点,它实现了在抽象类中定义的方法,并且可以添加、删除和获取子节点。
代码示例:
// 抽象类
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);
}
// 叶子节点
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void add(Component c) {
System.out.println("Cannot add to a leaf");
}
@Override
public void remove(Component c) {
System.out.println("Cannot remove from a leaf");
}
@Override
public void display(int depth) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < depth; i++) {
sb.append("-");
}
System.out.println(sb.toString() + name);
}
}
// 容器节点
public class Composite extends Component {
private List
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) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < depth; i++) {
sb.append("-");
}
System.out.println(sb.toString() + name);
for (Component component : children) {
component.display(depth + 2);
}
}
}
标签:
评论列表 (0)