参考博文:https://www.cnblogs.com/jingmoxukong/p/4221087.html 侵权删除
2019-06-25 13:36:54
组合模式 Component
什么是组合模式:将对象组合成“树形”结构以表示“部分-整体”的层次结构。使得客户对单个对象或组合对象的使用具有一致性。
适用性:需要对单个对象和对象组合提供一致性的操作。
组合模式成员:
Component:组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子部件。
Composite:定义枝节点行为,用来存储子部件,在 Component 接口中实现与子部件相关的操作。例如 Add 和 Remove。
leaf:表示叶节点对象,叶子节点没有子节点()。
组合模式代码思考:
需要对叶子节点和枝节点提供统一性的操作,故将叶子节点和枝节点抽象提供统一的接口。
枝节点中的operation()方法:
for(Component c : components){
c.operation();
}
叶节点中的operation()方法:
public void operation() {
//相应操作
}
组合模式基本代码:
import java.util.ArrayList; import java.util.List; /** * 将对象和对象组合抽象 */ public interface Component { public void add(Component c); public void remove(Component c); public void operation(); } /** * 枝节点 * 对象组合,可以添加或删除对象 * */ class Composite implements Component{ private String name; private List<Component> components; //List集合表示子结点容器 public Composite(String name) { components = new ArrayList<>(); this.name = name; } @Override public void add(Component c) { components.add(c); } @Override public void remove(Component c) { components.remove(c); } @Override public void operation() { for(Component c : components){ c.operation(); } } } /** * 叶子节点 * 不能有添加节点或删除节点 */ class Leaf implements Component{ private String name; public Leaf(String name) { this.name = name; } @Override public void operation() { System.out.println("leaf operation " + name); } @Override public void add(Component c) {} @Override public void remove(Component c) {} } /** * 客户端 * 测试代码 * */ class Client{ public static void main(String[] args) { Component root = new Composite("root"); Component node1 = new Composite("node1"); Component leaf1 = new Leaf("leaf1"); Component leaf21 = new Leaf("leaf21"); Component leaf22 = new Leaf("leaf22"); root.add(node1); root.add(leaf1); node1.add(leaf21); node1.add(leaf22); root.operation(); node1.operation(); leaf1.operation(); } } /* 输出结果: leaf operation leaf21 leaf operation leaf22 leaf operation leaf1 leaf operation leaf21 leaf operation leaf22 leaf operation leaf1 */