首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在树视图中使用复合模式有意义吗?

在树视图中使用复合模式有意义吗?
EN

Stack Overflow用户
提问于 2016-01-26 13:11:04
回答 1查看 534关注 0票数 0

我有一个树视图,其中每个节点都是不同类型的项目-只有标签和描述属性是相同的。用复合组件表示这些节点项有意义吗?

我问的原因之一是,我注意到,虽然应用复合设计模式可以更容易地应用聚合函数(应用于聚合对象),但在该聚合中实际访问单个项会变得更加困难。

这通常意味着访问单个项,它将需要将项类型转换回其原始类型,或者它需要包含类型信息,这在OOP中被认为是一种糟糕的做法。在常见的示例中,这些内部对象并没有真正公开。

为了正确理解这一点,考虑一下我的TreeView,它显示了3个主要城市的旅游景点。第一级节点是城市名称,然后包含该城市中的景点。

代码语言:javascript
复制
New York
   Time Square
   Central Park
London
   British Meuseum
Paris
   Eiffel Tower

所以现在当用户点击城市时,程序会显示关于该城市的信息(比如在右窗格中),如果他们点击该景点,它就会显示该景点的信息。

这是否适合复合设计模式?如果是这样,它不需要将组件类型转换回它到底是城市还是景点?

其次,这不需要从组合中挖出组件才能显示它吗?与将它们放在一起的模式背道而驰?

如果重要的话,我的环境是C++/Qt。

EN

回答 1

Stack Overflow用户

发布于 2016-01-27 01:11:21

快速简短应答

不,你不必使用“组合”软件设计模式,你可以用它自己的特定类/类型来声明每一项。

长而无趣的扩展应答

你没有。

集合,如堆栈、列表、矩阵(矩阵的复数)和特殊的树形集合是使用此模式的一种自然方式,其中所有项都属于相同的类或类型,或者可以表现为它们具有相同的类、类型或接口,即使它们具有不同的类型。

然而,在许多情况下,最好使用它,并以相同的类型声明所有项,例如相同的超类或相同的接口,因为它允许对所有元素执行公共操作。

您可能会发现,一些GUI界面和控件(如QT )将此模式应用于不完全相同的类的元素,只是因为它们需要打印每个元素的图像或标签。

在每个项目中,从一般类向后或向前转换到特定类(也称为“方差”和“逆方差”)可能很复杂,但在logn项编程中可能是有用的。

注意:如果您使用原型或接口继承而不是类继承来实现此模式,情况也是如此。

摘要

软件设计模式和最佳实践是指导方针,而不是严格的规则,这意味着它们在某些情况下可能是有帮助的,在其他情况下则不是那么有帮助。

如果您理性地认为它们不适合您的需要,那么您可以明确避免使用它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35007394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档