我倾向于有一个类来描述一个概念和一个子类来描述该概念中的差异。例如,Polygon
< | - {Rectangle
,Triangle
等}。根据其专用类型确定数据对象的表示类?
但是,我经常发现我有这些层次结构的各种表示。例如,我想将图形表示(例如QPolygon)或物理表示(mass,centerOfMass)等与其他表示相分离。
在我的情况,我有纯粹数据对象的分层结构(Command
< | - {WaitCommand
,UnknownCommand
等})和I具有匹配的GUI表示对于每个数据类(WaitCommandPanel
,UnknownCommandPanel
)的。
我的问题是,一旦我构造数据表示,我需要从数据到GUI的闰秒。
给定一个数据对象列表,我希望能够构造相应的GUI元素,但保持两个表示分离。
每个Command
都有一个[糟糕的]解决方案有能力(即,Command::getPanel()
)返回它的GUI表示。我不喜欢这样做,因为我的数据类现在有表示代码。
另一种解决方案(我目前采用的方法)是查找。也就是说,当启动GUI时,给定一个Command
s(泛化)的列表,该函数根据其专用类型确定要创建的对象。我也不喜欢这个。
有什么建议吗?
我Matryoshka-dolled我的GUI(主窗口有项目面板,项目面板有命令面板等)每个级别都不知道它在哪里嵌套/上面的级别。但是,每个级别都知道下面的级别(这是下级级别存在的上下文),我想我会将其保留到面板用于决定的级别。我不需要任何花哨的XML,因为类的配对不会改变(''X''总是使用'XPanel'作为GUI表示。)另外,这很容易在python中使用字典关联:type(X)=> XPanel的构造函数。谢谢。 – jkiv 2010-07-09 13:31:55
特别是与Python,你可以使用命名约定来做关联。遍历范围并填充您的渲染器查找映射,以便将任何类型的窗体(?。*)Renderer注册为:type(obj)=> type(objRenderer)。所以你只需要定义类MyData和MyDataRenderer - 并且它们会自动关联。 (恕我直言,这种方法是**酷**,但不实际 - 会导致更多的问题比解决) –
2010-07-09 16:17:19