【问题标题】:GUI system architecture? [closed]GUI系统架构? [关闭]
【发布时间】:2011-02-20 07:55:55
【问题描述】:

我正在为游戏引擎 (C++) 设计 GUI(图形用户界面)系统。

想法是创建一系列 GUI 控制器,例如 Focusable、Hoverable、Dragable 等。每个 GUI 组件都可以附加多个控制器,它们会修改组件的行为。

我认为它提供了灵活的系统并防止代码重复。同一个 GUI 类的不同实例可以有不同的复杂行为(可能,甚至动态改变它),所以这种方法看起来很实用。

另一种选择是在基础 GUI 组件类中添加聚焦、悬停、拖动等标志。它看起来像开销,而不是那么灵活。

另一种解决方案是使用装饰器模式并使用 FocusDecorator、HoverDecorator 等包装对象。维护这样的系统看起来有点困难。

问题:我的解决方案有哪些缺陷?您可能在 GUI 系统中看到过更好的方法吗?实现这种灵活的复杂系统的最佳方法是什么?

【问题讨论】:

  • 您给出了三个解决方案,然后询问您的解决方案中存在哪些缺陷 - 您要问的是哪一个,或者您想要一个 3x3 交易研究?
  • 仔细阅读问题。我给出了我的解决方案和两个替代方案。
  • 不,你给出一个“想法”、一个选择和另一个解决方案。
  • 伙计,你没有通过图灵测试。 :-D
  • 是什么让你放弃了现有的 gui 库,比如 crazyEd 的 gui 或 wxwindows?

标签: c++ user-interface oop architecture


【解决方案1】:

为什么不用“策略”模式来解决组件行为变化的问题呢?

【讨论】:

  • GUI 组件可以同时聚焦和悬停或仅聚焦或仅悬停。另一个只能拖动。看起来 GUI 组件可以同时有许多策略。或至少一种复合策略。
  • 从你所说的来看,在我看来你有两个行为变化的来源:如何处理用户输入以及如何在屏幕上实际表示小部件。您是否预见到您会同时针对这两个方面制定策略组合?
  • 是的,控制器(方面)反映了用户输入处理和视图。客户端代码如下所示:component.addController(focusable); ... focusable 具有插槽并连接到组件的信号 onKeyUp、onPaint 等。
  • 我会选择策略,在我看来最适合您的问题的策略。对于初学者。与任何设计一样,无论如何它都会不断发展:)
【解决方案2】:

说实话,您的解决方案非常好,我认为这正是装饰器设计模式的意义所在,但是在 C++ 中,您手头有更好的实现技术。您可以轻松地使用基于策略的设计来创建 GUI 组件模板类并添加组件行为特征类作为其参数,然后从参数继承。

【讨论】:

  • 谢谢,在大多数情况下,基于模板的实现确实更可取。但可能是脚本驱动的 GUI 组件构建可以通过这种动态(一个多 pimpl)实现变得更加灵活。
猜你喜欢
  • 1970-01-01
  • 2011-07-05
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2010-09-12
  • 1970-01-01
  • 2015-11-28
相关资源
最近更新 更多