前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 设计模式系列(12) —— 组合模式

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

作者头像
求和小熊猫
发布2021-01-14 10:36:43
3070
发布2021-01-14 10:36:43
举报
文章被收录于专栏:∑小熊猫的博客

组合模式

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

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

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

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

组合模式的优点:

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

组合模式的缺点:

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

组合模式的使用场景:

  • 维护和展示部分与整体关系的场景,如树形菜单、文件和文件夹管理
  • 从一个整体中能够独立出部分模块或功能的场景
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 组合模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档