当前位置: 首页 > news >正文

《java与模式》学习系列——合成模式

 

合成(Composite)模式的结构图

合成模式是将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与符合元素同等看待。在如下情况下使用合成模式:

1、需要描述对象的部分和整体的等级结构2、需要客户端忽略掉个体构件和组合构件的区别。客户端必须平等对待所有的构件,包括个体构件和组合构件。

合成模式有两种形式,分别为安全式和透明式

透明式

Component里面声明所有的用来管理子类对象的方法,包括add()remove(),以及getChild()方法。这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等的对待所有的对象。这就是透明形式的合成模式。其缺点是不够安全,因为树叶类对象和合成类对象在本质上是有区别的。树叶类对象不可能有下一个层次的对象,因此add()remove()以及getChild()方法没有意义。

 


安全式

在树枝结构Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的。缺点是不够透明,因为树叶类和合成类将具有不同的接口。

二、合成模式在Java中的应用

由于AWTSwing的图形界面构件是建立在AWT库中的Container类和Component类上的,从下面的AWT合成模式类图可以看出,ButtonCheckbox是树叶型的构件,而Container则是树枝型的构件。如下图所示:

Container类中,有操作聚集的对应方法,而在Component类中则没有这样的方法。这就是说,AWT中使用的合成模式是安全形势的合成模式。

 

相关文章:

  • 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较
  • 《java与模式》学习系列——代理模式
  • 5种必知的大数据处理框架技术
  • 《java与模式》学习系列——策略模式
  • mysql:字符串转换为日期类型
  • 《java与模式》学习系列——模版方法模式
  • 《java与模式》学习系列——备忘录模式
  • 向量加减法运算及其几何意义
  • 关于 Java 中 finally 语句块的深度辨析
  • Linux 基础(一)
  • Windows 7 应用程序exe图标丢失的修复
  • 算法导论学习笔记——堆排序
  • 让Docker容器使用静态独立的外部IP(便于集群组建)
  • 算法导论学习笔记——插入排序
  • 本地Git仓库与Github远程仓库同步
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • HTTP中的ETag在移动客户端的应用
  • oschina
  • Protobuf3语言指南
  • vue:响应原理
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 配置 PM2 实现代码自动发布
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 写代码的正确姿势
  • 第二十章:异步和文件I/O.(二十三)
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # Panda3d 碰撞检测系统介绍
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2)MFC+openGL单文档框架glFrame
  • (33)STM32——485实验笔记
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (接口自动化)Python3操作MySQL数据库
  • (六)c52学习之旅-独立按键
  • (一)kafka实战——kafka源码编译启动
  • (一)SpringBoot3---尚硅谷总结
  • (转)视频码率,帧率和分辨率的联系与区别
  • ./configure,make,make install的作用
  • .form文件_一篇文章学会文件上传
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .Net中wcf服务生成及调用
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • ::前边啥也没有
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [20190113]四校联考
  • [4.9福建四校联考]
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C++]命名空间等——喵喵要吃C嘎嘎