Composite模式和树形结构的讨论
最近在使用Jdon框架做JiveJdon3,碰到一个老问题,主题帖和回帖之间是树形结构关系,现在碰到两种方案:
1. 采取Composite模式封装复杂的树形结构,这样外界要访问一个主题贴需要树形遍历时,由Composite内部来树形算法来遍历,外界只要告诉要怎样的结果即可。
优点:封装了树形结构的遍历算法,外界客户端无需自行进行帖子的树形结构相关判断代码。
缺点:对树形结构的操作有各种各样,而且以后可能有新增新的操作,这可能涉及修改Composite模式的Component接口。
Composite模式:http://www.jdon.com/designpatterns/composite.htm
这种采取Composite模式封装树形结构遍历的方法,为防止新增新的操作改动接口,可引入访问者模式,下面这篇文章谈到了用C++实现Composite模式+Visitor模式解决树形结构封装算法:
http://members.home.nl/r.f.pels/articles/misc/C++PatternsAndTreesSeparatingKnowledge.html
它主要讨论了如何分离树形结构的不同类的对象和用户界面的树形结构表现这两个方面。
2.不采取Composite模式进行树形结构封装,就象原来Jive一样,给每个主题贴提供一个TreeWalker对象,这样外界如果要遍历这个主题贴时,自己通过TreeWalker去遍历树形结构。
优点:比较符合模型编程,ForumThread主题贴是一个模型,里面提供一个自身树形结构遍历,非常开放,外界客户端有新的操作,只要得到模型ForumThread就可以了。
缺点:TreeWalker提供的树形结构遍历方法有限,有可能不能满足新的操作或新的功能的需要。
有过这方面考虑的人可一同讨论一下。