今天我们讲解到了第十一种设计模式:组合设计模式。有了前面一些设计模式积累的基础,我相信这次的组合设计模式一定不会难倒你们的。
好了,废话不多说,接着往下看。
大学中计算机的基础课程,我们都会学习《数据结构》。里面讲到树的结构,最常用的就是二叉树。二叉树其实就是一种“组合”设计模式。
组合设计模式在实际项目中其实应用也很广泛,比如人事管理系统。最上面董事长,到下面技术总监、财务总监、人事总监等。再往下划分,就是组长,员工。可以看出整个结构就是一个树状结果(非二叉树)。
定义一个树状节点如下:
测试类如下:
总结:
组合设计模式其实很简单,在我们 项目中也会经常使用。其实我们在Java中使用LinkedList类(链表)、HashMap,都可以看成组合设计模式。如果你的项目中需要实现一种“包含关系”的结构,那么“组合”设计模式可以考虑。废话不多说,咋们接下来思考几个问题。
思考1:假如我们需要设计一个人力资源管理系统,应该怎么设计类图?
我们首先明确,人力资源管理系统是一个类似树状结构。但是还是有区别的,比如我们董事长(Root节点)和下一级的总监(Branch节点)、以及员工(Leaf节点)所掌握的属性肯定不同,那么我们可以分开设计,但是互相包含。类图如下:
我们定义Root节点接口IRoot以及实现类Root,让其作为根节点(董事长)。然后定义树枝节点的接口IBranch和实现类Branch。最后定义普通员工的ILeaf接口以及实现类Leaf。
我们为了体现“组合”设计模式的思想,我们让IRoot的ArrayList持有所有IBranch,IBranch中的ArrayList持有ILeaf。这样可以通过一层层展开,达到树状结构。
至于具体实现,各位小伙伴可以自己尝试去实现一下。
领取专属 10元无门槛券
私享最新 技术干货