java中组合_java中组合模式详解和使用方法
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。
介绍
意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。
关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。
应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。
优点: 1、高层模块调用简单。 2、节点自由增加。
缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。
注意事项:定义时为具体类。
实现
我们有一个类 Employee,该类被当作组合模型类。CompositePatternDemo,我们的演示类使用 Employee 类来添加部门层次结构,并打印所有员工。
java中组合_java中组合模式详解和使用方法相关推荐
- 组合模式java怎么获取钥匙_java中组合模式详解和使用方法
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...
- java aqs原理_Java并发之AQS详解
一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQ ...
- java异常例子_java 异常的实例详解
java 异常的实例详解 1.异常的定义:程序在运行时出现不正常情况. 异常的划分: Error:严重的问题,对于error一般不编写针对性的代码对其进行处理. Exception:非严重的问题,对于 ...
- java list用法_java list的用法详解
java list的用法详解 java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中.以下是百分网小编搜索整理的关于java list的用法详解,需要的朋友可以参考一下!想了解更多相关 ...
- 设计模式java装饰模式范例_Java设计模式之装饰模式详解
装饰者模式是动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 假设我们有一个需求,是给一家饮料店做一个计算各种饮料价格的功能.听起来很简单,我们创建一个抽象父类Bever ...
- java多线程代码_java多线程实例代码详解
原文:http://blog.csdn.net/paranoidyang/article/details/70184523 作者:Paranoidyang 线程与进程的区别 (1)程序是一段静态的代码 ...
- java file 实例_Java File类的详解及简单实例
Java File类的详解及简单实例 1. File():构造函数,一般是依据文件所在的指定位置来创建文件对象. CanWrite():返回文件是否可写. CanRead():返回文件是否可读. Co ...
- java volatile 用法_java关键字volatile用法详解
volatile关键字想必大家都不陌生,在java 5之前有着挺大的争议,在java 5之后才逐渐被大家接受,同时作为java的关键字之一,其作用自然是不可小觑的,要知道它是java.util.con ...
- java 监听器 分类_java过滤器和监听器详解 分类: 学习专区
过滤器 1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求 ...
最新文章
- spring整合mybatis(入门级简单教程3)--获取sqlSession对象
- 制作rhel的yum仓库
- 面向对象编程之:封装、继承、多态
- java:我们对Iterator理解错了
- Android-入门学习笔记-JSON 解析
- SpringCloud学习笔记014---可以使用json对rabbitmq进行封装,方便数据传输
- linux yum 安装播放器,centos6.5 常用影音播放器安装
- 3G网络通信技术与4G网络通信技术的区别
- android 服务英文,Android recovery 模式 中英文对照
- 程序员面试时会遇上哪些问题
- Android Studio运行app启动模拟器一直卡在“Wating for target device to come online”解决方法
- 基于javaweb框架的springboot mybatis宠物商城源码含论文设计文档
- Ubuntu 20.04安装sogou输入法
- 微信小程序-000-签到功能-011-我报名过的活动-查看详情
- 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。 请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。如下实例。示例 :输入: 1->2->3->4-
- python爬取收费素材_基于Python爬取素材网站音频文件
- [VB.NET源码]学习教程(PDF)
- 理解ODBC:DSN、ODBC管理器、驱动程序
- MATLAB教程一:MATLAB基础知识
- Git - Cloning Specific Commits 使用git clone指定的commit
热门文章
- Pytorch(八) --Pytorch实现多分类问题
- A strange lift HDU - 1548(基础广搜)
- 城市规划Java_智慧城市通过边缘计算转向高层次的城市规划
- MySQL innosetup_使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包
- c语言表达式判断,在C语言的if语句中,用做判断的表达式为()。
- 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办
- maven配置tomcat7
- linux-shell命令之chmod(change mode)【更改权限】
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- 【Transformer】Augmented Shortcuts for Vision Transformers