Java设计模式架构与模式程序员

Composite 组合模式

2017-12-30  本文已影响14人  holysu

动机

程序经常需要操作树形数据结构,而且需要同等对待分支和叶子节点。我们来思考下一个文件管理系统。文件管理系统是由分支(文件夹)和叶子节点(文件)组成的树形结构。注意,一个文件夹通常包含一个或多个文件或文件夹,这样的是一个复杂对象;相对地,文件是简单对象。我们还注意到由于文件和文件夹的很多操作和属性都是一样的,比如移动、复制、列出文件或文件夹的属性(如名称和大小);那么要是我们定义一个文件系统资源接口来把文件和文件夹对象统一对待,操作上就会方便很多。

目的

实现

composite pattern uml
示例代码

如果客户端需要对所有节点执行操作,而且不管节点到底是分支还是叶子节点。那么客户端只需要通过 component 接口持有所需节点的引用,然后通过这个接口机进行处理就行了。

应用场景 & 例子

组合模式适用于存在部分-整体的层次结构,并且客户端需要一致地对对象进行处理而不管对象是分支还是叶子节点。

例子 - 图形编辑器

在图形编辑器中,图形可以是基本的也可以是复杂的。举例来说,直线是简单的图形,矩形是由四条直线组成的复杂图形。由于各种图形有许多一样的操作,如渲染到屏幕上;而且图形遵循着部分-整体的层次结构,组合模式就能用来让程序一致地处理所有图形的行为。

例子中各角色定义如下:

composite pattern uml2

总结

相关模式

Decorator Patterm 装饰者模式经常和组合模式一起使用。当装饰者和组合模式一起使用的时候,它们将有一个共同的父类。然后装饰者对象需要支持组合模式的组件接口 Component ,如 Add, Remove 和 GetChild。

目录 https://www.jianshu.com/p/af861220a6cc

上一篇 下一篇

猜你喜欢

热点阅读