关于树形结构的博客,我总结了下面五篇,其实进行树的加载与展示有很多方案,我觉得我通过优雅的方式实现了,并且做到结点通用与业务扩展属性,针对树的装配做了大量的分析工作,尤其是在算法上力求简洁,当然这期间历经数次重构。
比较有意思的是我在重构中经历如下阶段:
1.结点 AbstractNode,树 AbstractTree,用到了模板方法,在抽象类里面组织好步骤,结点列表放在子类里实现。
2.在1中有一个问题就是造成类的膨胀因为针对每一个业务都会有不同的业务知识在里面,都要写一个新的子类来实
现AbstractNode中定义的抽象方法,还要有一个AbstractTree实现,针对这个问题,我要对它进行大的改动:
首先:修改AbstractNode 为泛型类,并改成具体类型,提供extend扩展,这样解决了针对不同的业务要建立不同的结点实现。
其次:修改AbstractTree 为泛型类,并改成具体类型。只要传入结点列表即可建立一个tree实例。
这里有一些比较好有意思的设计:
1.如何对结点进行排序。
2.如何得到每一个结点下面的最大深度。
3.怎么样不用第三方js插件展示菜单。