组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。

介绍

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

主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。

关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。

优点: 1、高层模块调用简单。 2、节点自由增加。

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。

注意事项:定义时为具体类。

实现

我们有一个类 Employee,该类被当作组合模型类。CompositePatternDemo,我们的演示类使用 Employee 类来添加部门层次结构,并打印所有员工。

java中组合_java中组合模式详解和使用方法相关推荐

  1. 组合模式java怎么获取钥匙_java中组合模式详解和使用方法

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...

  2. java aqs原理_Java并发之AQS详解

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  3. java异常例子_java 异常的实例详解

    java 异常的实例详解 1.异常的定义:程序在运行时出现不正常情况. 异常的划分: Error:严重的问题,对于error一般不编写针对性的代码对其进行处理. Exception:非严重的问题,对于 ...

  4. java list用法_java list的用法详解

    java list的用法详解 java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中.以下是百分网小编搜索整理的关于java list的用法详解,需要的朋友可以参考一下!想了解更多相关 ...

  5. 设计模式java装饰模式范例_Java设计模式之装饰模式详解

    装饰者模式是动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 假设我们有一个需求,是给一家饮料店做一个计算各种饮料价格的功能.听起来很简单,我们创建一个抽象父类Bever ...

  6. java多线程代码_java多线程实例代码详解

    原文:http://blog.csdn.net/paranoidyang/article/details/70184523 作者:Paranoidyang 线程与进程的区别 (1)程序是一段静态的代码 ...

  7. java file 实例_Java File类的详解及简单实例

    Java File类的详解及简单实例 1. File():构造函数,一般是依据文件所在的指定位置来创建文件对象. CanWrite():返回文件是否可写. CanRead():返回文件是否可读. Co ...

  8. java volatile 用法_java关键字volatile用法详解

    volatile关键字想必大家都不陌生,在java 5之前有着挺大的争议,在java 5之后才逐渐被大家接受,同时作为java的关键字之一,其作用自然是不可小觑的,要知道它是java.util.con ...

  9. java 监听器 分类_java过滤器和监听器详解 分类: 学习专区

    过滤器 1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求 ...

最新文章

  1. spring整合mybatis(入门级简单教程3)--获取sqlSession对象
  2. 制作rhel的yum仓库
  3. 面向对象编程之:封装、继承、多态
  4. java:我们对Iterator理解错了
  5. Android-入门学习笔记-JSON 解析
  6. SpringCloud学习笔记014---可以使用json对rabbitmq进行封装,方便数据传输
  7. linux yum 安装播放器,centos6.5 常用影音播放器安装
  8. 3G网络通信技术与4G网络通信技术的区别
  9. android 服务英文,Android recovery 模式 中英文对照
  10. 程序员面试时会遇上哪些问题
  11. Android Studio运行app启动模拟器一直卡在“Wating for target device to come online”解决方法
  12. 基于javaweb框架的springboot mybatis宠物商城源码含论文设计文档
  13. Ubuntu 20.04安装sogou输入法
  14. 微信小程序-000-签到功能-011-我报名过的活动-查看详情
  15. 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。 请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。如下实例。示例 :输入: 1->2->3->4-
  16. python爬取收费素材_基于Python爬取素材网站音频文件
  17. [VB.NET源码]学习教程(PDF)
  18. 理解ODBC:DSN、ODBC管理器、驱动程序
  19. MATLAB教程一:MATLAB基础知识
  20. Git - Cloning Specific Commits 使用git clone指定的commit

热门文章

  1. Pytorch(八) --Pytorch实现多分类问题
  2. A strange lift HDU - 1548(基础广搜)
  3. 城市规划Java_智慧城市通过边缘计算转向高层次的城市规划
  4. MySQL innosetup_使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包
  5. c语言表达式判断,在C语言的if语句中,用做判断的表达式为()。
  6. 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办
  7. maven配置tomcat7
  8. linux-shell命令之chmod(change mode)【更改权限】
  9. Nginx+Tomcat+Memcached实现tomcat集群和session共享
  10. 【Transformer】Augmented Shortcuts for Vision Transformers