java 设计模式系列(12) —— 组合模式

2021-01-14 10:36:43 浏览数 (2)

组合模式

组合模式又称合成模式,用来描述部分与整体之间的关系

组合模式的定义: 将对象组合成树形结构以表示“部分-整体”的层次机构,使得用户对单个对象和组合对象的使用具有一致性。

组合模式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();
	}

}
组合模式的优缺点和应用场景

组合模式的优点:

  • 高层模块调用简单
  • 节点自由增加

组合模式的缺点:

  • 不易控制树枝构件的类型
  • 不易使用继承的方法来增加新的行为

组合模式的使用场景:

  • 维护和展示部分与整体关系的场景,如树形菜单、文件和文件夹管理
  • 从一个整体中能够独立出部分模块或功能的场景

0 人点赞