技术开发 频道

组合模式:实战人事管理之树状结构

  组合模式的优点

  1. 高层模块调用简单

  一棵树形机构中的所有节点都是Component,局部和整体对调用者来说没有任何区别,也就是说,高层模块不必关心自己处理的是单个对象还是整个组合结构,简化了高层模块的代码。

  2.节点自由增加

  使用了组合模式后,我们可以看看,如果想增加一个树枝节点、树叶节点是不是都很容易呀,只要找到它的父节点就成,非常容易扩展,符合开闭原则,对以后的维护非常有利。

  组合模式的缺点

  组合模式有一个非常明显的缺点,看到我们在场景类中的定义,提到树叶和树枝使用时的定义了吗?直接使用了实现类!这在面向接口编程上是很不恰当的,与依赖倒置原则冲突,读者在使用的时候要考虑清楚,它限制了你接口的影响范围。

  组合模式的应用

  1.维护和展示部分-整体关系的场景,如树形菜单、文件和文件夹管理。

  2.从一个整体中能够独立出部分模块或功能的场景。

  组合模式的注意事项

  只要是树形结构,就要考虑使用组合模式,这个一定要记住,只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深,考虑一下组合模式吧。

  组合模式的扩展

  真实的组合模式

  什么是真实的组合模式?就是你在实际项目中使用的组合模式,而不是仅仅依照书本上学习到的模式,它是“实践出真知”。在我们的例子中,经过精简后,确实是类、接口减少了很多,而且程序也简单很多,但是大家可能还是很迷茫,这个Client程序并没有改变多少呀,非常正确,树的组装你是跑不了的,你要知道在项目中使用关系型数据库来存储这些信息,你从数据库中可以直接提取出哪些人要分配到树枝,哪些人要分配到树叶,树枝与树枝、树叶的关系等等,这些都是由相关的业务人员维护到数据库中的,通常这里是把数据存放到一张单独的表中,表结构如下图所示。

  这张数据表定义了一个树形结构,我们要做的就是从数据库中把它读取出来,然后展现到前台上,用for循环加上递归就可以完成这个读取。用了数据库后,数据和逻辑已经在表中定义好了,我们直接读取放到树上就可以了,这个还是比较容易做的,大家不妨自己考虑一下。

  这才是组合模式的真实引用,它依靠了关系数据库的非对象存储性能,非常方便地保存了一个树形结构。大家可以在项目中考虑采用,想想看现在还有哪个项目不使用关系型数据库呢?

 

0
相关文章