? ? ? 组合模式(Composite Pattern)属于结构型的设计模式,它允许你将对象组合成树形结构,并且以统一的方式处理单个对象与对象组合。在组合模式中,单个对象与复合对象都可以通过相同接口进行访问和操作,从而实现对整个对象树的透明化处理。
组合模式示例代码:
// Component 接口或抽象类
public abstract class Component {
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract void operation();
}
// Leaf 类
public class Leaf extends Component {
@Override
public void add(Component component) {
// 不支持添加子节点的操作
throw new UnsupportedOperationException();
}
@Override
public void remove(Component component) {
// 不支持移除子节点的操作
throw new UnsupportedOperationException();
}
@Override
public void operation() {
// 叶子节点的具体业务逻辑实现
System.out.println("Leaf operation");
}
}
// Composite 类
public class Composite extends Component {
private List<Component> children = new ArrayList<>();
@Override
public void add(Component component) {
children.add(component);
}
@Override
public void remove(Component component) {
children.remove(component);
}
@Override
public void operation() {
// 执行自身的操作
System.out.println("Composite operation");
// 遍历并执行子节点的操作
for (Component child : children) {
child.operation();
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Component leaf1 = new Leaf();
Component leaf2 = new Leaf();
Component composite = new Composite();
composite.add(leaf1);
composite.add(leaf2);
composite.operation(); // 输出 "Composite operation" 和两次 "Leaf operation"
}
}
说明:在上面代码中Component
?是通用接口,Leaf
?是叶子节点,而?Composite
?是组合节点。当调用?composite.operation()
?时,它会先执行自身的方法,再递归调用每个子节点的?operation()
?方法。