设计图案,用以转换一种类型的树形结构到另一个?
-
05-07-2019 - |
题
我有一种树形结构,这表示一个层次结构中的层地图、分类层和类别。各节点可以不同类不同类型的层(但是所有的节点实现一个共同的接口)。
我需要把这一流的一个ASP.NET 树视图的控制。每个节点在输入树是一个节点在输出树,与设置的属性,都取决于这种类型的节点。我不想输入树类知道UI类,所以我不能写"ToTreeViewNode()"方法。目前有4种类型的混凝土节点的课程,其中2个是复合材料(包含儿童节点)和2都是树叶。这可能会改变未来。
这感觉就像有一个设计图案在这里发痒,被用,你可以帮我找到它是什么?
解决方案
访客或许,可以走路输入树并构建相应的用户界面树吗?
其他提示
我的.NET有点生疏,但你可以做的是创建一个单独的TreeNodeCollection子类和可能的TreeNode,让他们访问你的结构,将你的 TreeNodeCollection赋给Nodes属性TreeViewControl。
TreeNodeCollection包装器将您的结构转换为TreeViewControl结构。 TreeNode类可能包含对您自己的节点的引用,但会将您的节点转换为TreeNodes。
换句话说,通过实现这两个接口,您可以将模型的接口调整为TreeViewControl使用的接口,
如果您使用访客模式创建并行结构,则每次发生更改时都必须运行它。或者您仍然需要使用TreeNode接口包装节点。
请参阅适配器模式
我不确定你想要达到的目标,但(据我所知)我认为如果你要同时使用这两种方法:
- 复合 - 用于节点(树)
- 策略 - 用于实施图纸“algotithm” 醇>
- 您不需要递归绘制每个绘图本身
- 您的绘图策略可以在运行时或对象实例期间更改
- 您可以扩展每个类层次结构,而不依赖于其他结构。
- 将其视为Web表单中的控件
- 此外,每个对象都是(SRP)单一责任原则 醇>
所以你将拥有:
public class Node
{
public IDraw genericDrawing;
public Node[] Childs;
public Node() { //init you genericDrawinf }
public void Draw()
{
genericDrawing.Draw(this);
foreach (Node child in Childs)
{
child.Draw();
}
}
}
public interface IDraw
{
void Draw(Node node);
}
public class SimpleDraw : IDraw
{
public void Draw(Node node)
{
// code your stuf in here.
}
}
伟大的事情是:
享受。
对我来说肯定听起来像你想在这里使用Model-View-Controller。您的树映射结构可能是Model,View是TreeView控件 - 您可能需要添加某种Controller类来管理两者之间的交互。
希望有你的问题的权利:
从"O'Reilly设计的接口模式有效的迭代设计"
你得到了这两种模式,通常获得相关树木:
- "联列出了"
- "热图"
该章第6这本书的作为十二周围设计paterns模式被用来显示复杂的数据。
我没找到任何链接到这些模式所以我猜你会需要检查的书在当地的图书馆。我发现了这个网页,该网页可能会有一些paterns以帮助你,但我已经检查并不包括这两种,或者那些从第6章.http://www.welie.com/patterns/