微信号:jason_guo_jun

介绍:分享和交流大数据领域技术,包括但不限于Storm、Spark、Hadoop等流行分布式计算系统,Kafka等分布式消息系统,PostgreSQL、MySQL等RDBMS.更多精彩好文见www.jasongj.com

Java设计模式(五) 组合模式

2016-04-28 07:10 郭俊 Jason
点击上方
大数据架构   快速关注


组合模式

本文介绍了组合模式的概念,UML类图,优缺点,实例讲解以及组合模式(未)遵循的OOP原则。


组合模式简介

组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用一致的方法操作单个对象和组合对象


组合模式类图

组合模式类图如下 (点击可查看大图)



组合模式角色划分

  • 抽象组件,如上图中的Component

  • 简单组件,如上图中的SimpleComponent

  • 复合组件,如上图中的CompositeComponent


组合模式实例

例:对于一家大型公司,每当公司高层有重要事项需要通知到总部每个部门以及分公司的各个部门时,并不希望逐一通知,而只希望通过总部各部门及分公司,再由分公司通知其所有部门。这样,对于总公司而言,不需要关心通知的是总部的部门还是分公司。


实例类图

组合模式实例类图如下(点击可查看大图)



实例解析

本例代码可从作者Github下载,https://github.com/habren/JavaDesignPattern/tree/master/CompositePattern/src/main


  • 抽象组件

抽象组件定义了组件的通知接口,并实现了增删子组件及获取所有子组件的方法。同时重写了hashCode和equales方法(至于原因,请读者自行思考。如有疑问,可私下交流)。



  • 简单组件(部门)

简单组件在通知方法中只负责对接收到消息作出响应,如下(点击可查看大图)



  • 复合组件(公司)

复合组件在自身对消息作出响应后,还须通知其下所有子组件



组合模式优点

  • 高层模块调用简单。组合模式中,用户不用关心到底是处理简单组件还是复合组件,可以按照统一的接口处理。不必判断组件类型,更不用为不同类型组件分开处理。

  • 组合模式可以很容易的增加新的组件。若要增加一个简单组件或复合组件,只须找到它的父节点即可,非常容易扩展,符合“开放-关闭”原则


观察者模式缺点

  • 无法限制组合组件中的子组件类型。在需要检测组件类型时,不能依靠编译期的类型约束来实现,必须在运行期间动态检测。


组合模式遵循的OOP原则

  • 依赖倒置原则(复合类型不依赖于任何具体的组件而依赖于抽象组件)

  • 迪米特法则

  • 里氏替换原则

  • 接口隔离原则

  • 单一职责原则

  • 开闭原则


组合模式未遵循的OOP原则

  • NA


版权声明

原创文章,始发自作者个人博客www.jasongj.com。转载请在文章开头处注明转自【大数据架构】并注明原文链接http://www.jasongj.com/design_pattern/composite/


长按下方二维码可快速关注


点击“阅读全文”,查看作者个人博客

↓↓

 
大数据架构 更多文章 Merge Join VS. Hash Join VS. Nested Loop (一) Kafka设计解析(一) Kafka背景及架构介绍 SQL优化(二) 快速计算Distinct Count 机器学习(一) 从一个R语言案例学线性回归 Kafka设计解析(二)- Kafka High Availability (上)
猜您喜欢 Andrew Ng\/徐伟谈人工智能发展的现状与未来 西安活动|第二届Mobile Day 深刻影响乔布斯、扎克伯格等人的文章:你事业的上限究竟在哪?强烈推荐收藏! 探索移动端App UI遍历方法- Smart Monkey C\/C++ 程序员必须收藏的资源大全