Java设计模式----组合模式(Composit )
1. 组合模式定义:
组合模式,又叫合成模式,有时又叫部分-整体模式,主要用来描述部分与整体的关系。
定义:将对象组合成树形结构以示“ 部分--整体 ”的层次结构,使得用户对单个对象的使用具有一致性。
2. 组合模式的3个对象:
a. Component 抽象构件角色
定义参加组合对象的共有的属性和方法,可以定义一些默认的行为或属性
b. Leaf 叶子构件
叶子对象,其下再无分支,也是遍历的最小单位
c. Composit 树枝构件
树枝对象,作用是组合树枝构件和叶子构件,形成树形结构
3. 组合模式通用示例代码:
Component类:
public abstract class Component {
//个体和整体都具有的共享
public void doSomething(){
System.out.println("大家都有的...");
}
}
NewLeaf 叶子构件类:
public class NewLeaf extends Component {
@Override
public void doSomething() {
super.doSomething();
System.out.println("叶子节点才有的.");
}
}
Composit 树枝构件类
public class Composit extends Component {
//构建容器
private ArrayList<Component> list=new ArrayList<Component>();
//增加一个叶子节点或树枝节点
public void add(Component com){
this.list.add(com);
}
//删除节点
public void remove(Component com){
this.list.remove(com);
}
//获得当前分支下的所有叶子节点和树枝节点
public ArrayList<Component> getChildren(){
return this.list;
}
}
测试代码:
public class Test {
public static void main(String[] args) {
//创建根节点
Composit root=new Composit();
root.doSomething();
//创建一个树枝节点
Composit branch=new Composit();
//创建一个叶子节点
NewLeaf leaf=new NewLeaf();
root.add(branch);
branch.add(leaf);
display(root);
}
public static void display(Composit root){
for (Component it : root.getChildren()) {
if(it instanceof NewLeaf){
it.doSomething();
}else{
display((Composit)it);
}
}
}
}
4. 组合模式的优点:
a. 高层模块调用简单
一棵树的所有节点都是Component,局部和整体对调用者来说并没有区别,也就是说,高层不必关心是在处理单个对象还是组合结构,简化了高层模块的代码。
b. 节点自由增加
如果要增加一个树枝节点或者树叶节点,只需要找到它的父节点即可。非常容易扩展,符合开闭原则。
5. 组合模式的缺点:
从测试类明显可以看出,在使用树叶和树枝定义时直接使用了实现类,而不是接口,与依赖倒置原则冲突!
6. 组合模式的使用场景:
a. 维护” 部分-整体“关系的场景,如树形菜单,文件和文件夹处理
b. 从一个整体中能够独立出部分模块和功能的场景
Java设计模式----组合模式(Composit )的更多相关文章
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- 【设计模式】Java设计模式 - 组合模式
Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...
- JAVA 设计模式 组合模式
用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构
- Java 设计模式 —— 组合模式
在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣服与衣柜.以及厨房中的锅碗瓢盆等.在软件开发中也是 ...
- Java设计模式—组合模式
组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表 ...
- Java设计模式-组合模式(Composite)
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图: 直接来看代码: public class TreeNode { private String name; private ...
- Java设计模式---组合模式
一.组合模式定义 组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite ...
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
- 16. 星际争霸之php设计模式--组合模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
随机推荐
- trim合理和谐
今天早上,到公司,噩耗传来.上周的上线的功能出现问题,后台mis中有数据不能保存了. 经过紧张的查找,还是我的问题.有一个查重操作,在查重前,会比对新旧值,新值顺手trim了.旧值直接保存了. 在比较 ...
- Android开发之创建桌面快捷方式
Android创建桌面快捷方式就是在桌面这个应用上创建一个快捷方式,桌面应用:launcher2 通过查看launcher2的清单文件: <!-- Intent received used to ...
- sdut 2831 Euclid (几何)
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2831 题意:给a, b, c, d, ...
- BootStrap图标
- bzoj3983
显然我们得到这样几个结论 1.每次攻击对方一定是攻击最大的 2.自己合并也是合并最大和次大的 我们只要穷举下一开始是攻击还是合并,之后就是能攻击先攻击否则就合并 ..] of int64; var a ...
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/694.html ☞ ...
- 【C#学习笔记】自我复制
using System; using System.IO; using System.Diagnostics; namespace ConsoleApplication { class Progra ...
- SharePoint 2013让页面显示错误
转:http://blog.csdn.net/zmoneyz/article/details/20460263 1. 在网站端口下,如80端口下的Web.config修改 (1)将<custom ...
- LXD 2.0 系列(二):安装与配置
导读 简单来说,LXD是一个守护进程,为LXC容器的管理提供一组REST API.主要目标是提供一种类虚拟机的用户体验,是一种第三方的容器管理工具.下面呢,我们来介绍LXD 2.0 的安装与配置 安装 ...
- TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5
最近使用mysql是发现插入的数据乱码,几经周折终于找到的解决方法,特作备忘. 开始有将mysql的字符集全部设置成utf8,如下: SHOW VARIABLES LIKE 'character_se ...