组合模式
组合模式又称合成模式,用来描述部分与整体之间的关系
组合模式的定义: 将对象组合成树形结构以表示“部分-整体”的层次机构,使得用户对单个对象和组合对象的使用具有一致性。
组合模式IDE三个角色:
- Component 抽象构件角色: 该角色定义了参加组合对象共有的方法和属性。
- Leaf 叶子构件角色: 该角色是叶子对象,其下没有其他分支。
- Composite 树枝构建角色: 组合树枝节点和叶子节点形成的一个树形结构。
组合模式的简单示例
抽象构件角色
该对象既可以是接口,也可以是抽象类
代码语言:javascript复制abstract class Component {
private String name;
private String content;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public void operation() {
System.out.println("name: " name " --- Content: " content);
}
}
代码语言:javascript复制树枝构件角色
public class Composite extends Component {
private List<Component> list = new ArrayList<>();
public void addNode(Component component) {
list.add(component);
}
public void removeNode(Component component) {
list.remove(component);
}
public Component getChild(int i) {
return list.get(i);
}
public void operation() {
System.out.println("The Branch has " list.size() " Childs");
super.operation();
for(Component i : list) {
i.operation();
}
}
}
代码语言:javascript复制叶子构件角色
public class Leaf extends Component {
public void operation() {
System.out.println("Show Leaf Node Details");
super.operation();
}
}
组合模式的优缺点和应用场景
组合模式的优点:
- 高层模块调用简单
- 节点自由增加
组合模式的缺点:
- 不易控制树枝构件的类型
- 不易使用继承的方法来增加新的行为
组合模式的使用场景:
- 维护和展示部分与整体关系的场景,如树形菜单、文件和文件夹管理
- 从一个整体中能够独立出部分模块或功能的场景