什么类的类/对象使用有关几个对象的信息来表示更大的系统?

Jer*_*emy 2 java design-patterns

假设我有一个"拥有"零个或多个分支的类树,并且每个分支"具有"零个或多个水果等.

假设我想创建一个对象,允许您将所有数据视为单个对象,因此我的界面用户不会说"树,遍历所有分支.对于每个分支,添加多少个水果总共有." 但是只会说"树,你有多少水果?" 或者"你有多少苹果?"

这是什么样的对象?什么设计模式适用?

Gui*_*one 5

听起来像访客模式 - 请参阅http://en.wikipedia.org/wiki/Visitor_pattern.

在维基百科文章中,他们给出了一个由Car元素组成的Car的例子.有一个基类CarElementVisitor.元素和基本访问者类合作以允许通过树进行迭代.

在您的情况下,您可能有一个基类TreeElementVisitor,它知道如何浏览树,水果等.

"Tree, how many fruit do you have?" 
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请创建一个名为FruitCountingVisitor的TreeElementVisitor子类,它将运行计数保留为成员变量.所有visitFruit方法都增加了计数器.其它方法,如visitTree,visitBranch等什么也不做.

Tree tree = // create a tree
FruitCountingVisitor visitor = // create the visitor
tree.accept(visitor);
System.out.println(visitor.getCount());
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建AppleCountingVisitor - 或者可以概括FruitCountingVisitor以根据构造函数参数过滤特定的水果.