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 )的更多相关文章

  1. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  2. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  3. JAVA 设计模式 组合模式

    用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构

  4. Java 设计模式 —— 组合模式

    在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣服与衣柜.以及厨房中的锅碗瓢盆等.在软件开发中也是 ...

  5. Java设计模式—组合模式

    组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表 ...

  6. Java设计模式-组合模式(Composite)

    组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图: 直接来看代码: public class TreeNode { private String name; private ...

  7. Java设计模式---组合模式

    一.组合模式定义 组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite ...

  8. 3.java设计模式-建造者模式

    Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...

  9. 16. 星际争霸之php设计模式--组合模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

随机推荐

  1. trim合理和谐

    今天早上,到公司,噩耗传来.上周的上线的功能出现问题,后台mis中有数据不能保存了. 经过紧张的查找,还是我的问题.有一个查重操作,在查重前,会比对新旧值,新值顺手trim了.旧值直接保存了. 在比较 ...

  2. Android开发之创建桌面快捷方式

    Android创建桌面快捷方式就是在桌面这个应用上创建一个快捷方式,桌面应用:launcher2 通过查看launcher2的清单文件: <!-- Intent received used to ...

  3. sdut 2831 Euclid (几何)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2831 题意:给a, b,  c,  d, ...

  4. BootStrap图标

  5. bzoj3983

    显然我们得到这样几个结论 1.每次攻击对方一定是攻击最大的 2.自己合并也是合并最大和次大的 我们只要穷举下一开始是攻击还是合并,之后就是能攻击先攻击否则就合并 ..] of int64; var a ...

  6. 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!

    本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/694.html ☞ ...

  7. 【C#学习笔记】自我复制

    using System; using System.IO; using System.Diagnostics; namespace ConsoleApplication { class Progra ...

  8. SharePoint 2013让页面显示错误

    转:http://blog.csdn.net/zmoneyz/article/details/20460263 1. 在网站端口下,如80端口下的Web.config修改 (1)将<custom ...

  9. LXD 2.0 系列(二):安装与配置

    导读 简单来说,LXD是一个守护进程,为LXC容器的管理提供一组REST API.主要目标是提供一种类虚拟机的用户体验,是一种第三方的容器管理工具.下面呢,我们来介绍LXD 2.0 的安装与配置 安装 ...

  10. TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5

    最近使用mysql是发现插入的数据乱码,几经周折终于找到的解决方法,特作备忘. 开始有将mysql的字符集全部设置成utf8,如下: SHOW VARIABLES LIKE 'character_se ...