我倾向于有一个类来描述一般概念和子类来描述该概念中的差异。例如,Polygon
<|-- { Rectangle
、Triangle
等}。
但是,我经常发现我对这些层次结构有各种表示。例如,我想将图形表示(例如,QPolygon)或物理表示(质量、centerOfMass)等与我拥有的另一个表示分开。
在我的例子中,我有一个纯数据对象的层次结构( < | Command
-- { WaitCommand
, ,UnknownCommand
等WaitCommandPanel
UnknownCommandPanel
我的问题是,一旦我构建了数据表示,我就需要从数据飞跃到 GUI。
给定一个数据对象列表,我希望能够构造相应的 GUI 元素,但将两种表示分开。
一个 [糟糕] 的解决方案是让每个Command
人都有能力(即,Command::getPanel()
)返回其 GUI 表示。我不喜欢这样,因为我的数据类现在有表示代码。
另一个解决方案(我暂时采用)是进行查找。也就是说,当启动 GUI 时,给定一个Command
s 列表(泛化),该函数根据其特殊类型确定要创建的对象。我也不喜欢这个。
有什么建议么?