3

我正在创建一个对象层次结构,它表示在控件上绘制的表。我的层次结构如下所示:

Table has multiple pages
Page has multiple lines
Line has multiple cells
Cell has multiple glyph

我想在表格上有一个选项(参数)来过滤显示的列(单元格)。客户端代码可以执行以下操作:

myTable.ShowColumns(8,12) // Will display columns 8 to 12

在控件上显示和放置单元格是 Lines 对象的职责。如何将要显示的单元格的信息从 Table 对象传递给 Line 对象?

我应该给每一行一个表对象的引用吗?每次Table.ShowColumns()调用时,我是否应该尝试通过层次结构将信息传递给每一行?

一定有优雅的方式吗?

4

2 回答 2

2

我认为不需要设计模式。(或者我不会那样称呼它)你为什么不只使用双链接,其中子链接到父链接,反之亦然?

于 2009-12-01T14:52:24.973 回答
1

如果我理解正确,您所说的祖先实际上是您的层次结构中的父母-实际上只不过是一棵树。对于树,通常的做法是让子节点引用它们各自的父节点。

至于 ShowColumns 函数的设计,我认为它应该通过对 Lines 类的类似内部函数调用来修改 Lines 类的内部状态变量(保存单元格)。

// something like this..
Table.ShowCollumns -> Table.m_lines.SetVisibleColumns -> (modify visible columns)

显然,根据列到页面以及页面到表的逻辑映射,您可能必须在调用Lines类上的SetVisibleColumns之前插入另一个调用,以便找到正确的页面对象:然后对该对象进行操作。Table.FindPageWithColumns(...)

于 2009-12-01T14:54:40.913 回答