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. sqort函数用法总结

    qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原 ...

  2. 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务(老罗学习笔记5)

    在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系 ...

  3. JVM 问题排查常用工具

    一. jmap // 打印jvm的堆状况,主要是年轻代和老年代信息 jmap -heap <pid> 如: Heap Configuration: MinHeapFreeRatio = M ...

  4. JEE学习线路

    传智播客:javaEE学习线路以及需要掌握的知识点:http://java.itcast.cn/subject/javastudypath/index.shtml 最近在学JavaEE,没学Java ...

  5. 5 commands to check memory usage on Linux

    Memory Usage On linux, there are commands for almost everything, because the gui might not be always ...

  6. 函数buf_page_get_gen

    /********************************************************************//** This is the general functi ...

  7. Spring MVC 的请求参数获取的几种方法

    通过@PathVariabl注解获取路径中传递参数 @RequestMapping(value = "/{id}/{str}") public ModelAndView hello ...

  8. context:property-placeholder

    这个在spring中配置文件中是非常常用的. context:property-placeholder大大的方便了我们数据库的配置. 只需要在spring的配置文件里添加一句:<context: ...

  9. uva 11624 Fire!(搜索)

    开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说.电视剧有意思多了 bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的 发现vis[][]是多余的,完全可以用 ...

  10. vs2013编译boost库

    打开vs2013>>visual studio tools>>VS2013 x64 本机工具命令提示 cd D:\lib\boost_1_55_0\boost_1_55_0 b ...