gpt4 book ai didi

c++ - 接口(interface)层次设计模式?

转载 作者:行者123 更新时间:2023-11-27 23:34:38 24 4
gpt4 key购买 nike

我正处于开发具有图形用户界面的 C++ 多平台(移动)应用程序的早期阶段。我试图找到一种抽象实际 UI/窗口实现的好方法。到目前为止,这基本上是我尝试过的:

我创建了一个界面层次结构

Screen
+Canvas
+Form
+Dialog
Control
+EditBox
+CheckBox
+...

我还有一个类,Application,它基本上使用所有这些接口(interface)来实现 UI 逻辑。 Application 类还提供用于创建 UI 类实例的抽象工厂方法。

这些接口(interface)都有实现。例如,对于 Windows Mobile,Win32Form 实现了 Form,Win32Canvas 实现了 Canvas,Win32Dialog 实现了 Dialog。如您所见,问题在于实现失去了层次结构,即 Win32Dialog 没有扩展 Win32Form。

这成为一个问题,例如,方法 Form::addControl(Control &ctrl)。在应用程序的 Windows Mobile 版本中,我知道 ctrl 参数是 Win32... 控件实现之一。但是由于丢失了层次结构,因此无法知道它是 Win32EditBox 还是 Win32CheckBox,我确实需要知道这些以便在控件上执行任何特定于平台的操作。

我正在寻找的是一些关于如何解决这个问题的设计模式。请注意,不需要保留此接口(interface)层次结构解决方案,这只是我目前的做法。我将采用任何方法来解决让 UI 逻辑与几个不同的 UI 实现分离的问题。

请不要告诉我使用这个或那个 UI 库;我喜欢从头开始编写代码,我参与其中是为了获得学习经验……;-)

最佳答案

我的一些灵感:

不要从 Screen 继承 Form。这不是"is"一种关系。

 Screen
Canvas
GUIObject
Form
Dialog
Control
Button
EditBox
CheckBox
...
Panel

更详细的描述:

屏幕

  • “有一个” Canvas
  • 提供显示特定功能
  • 不要试图继承 Canvas

Canvas

  • 你的抽象绘图环境
  • 目标是屏幕 Canvas 、表单 Canvas 、图像、内存...

图形用户界面对象

  • 在某些层次结构中发现
  • 通常会提供一些内省(introspection)能力
  • 通常提供消息处理接口(interface)

表格

  • 在一些工具包中实际上称为“对话”
  • “有一个” Canvas ,你可以在上面画画
  • “有一个”控件列表或一个客户区面板
  • “有一个”标题、滚动条等。

对话框

  • 我喜欢调用标准化的 YesNo、OpenFile 等对话框,基本上简化了 Form(没有关闭按钮,没有菜单等)
  • 可以继承也可以不继承Form

希望控件是不言自明的(面板是内部带有可选滚动条的控件的区域)。

这应该有效。然而,如何在不破坏此界面的通用性和/或易用性的情况下利用每个平台的特定功能是困难的部分。我通常尝试将所有绘图与这些基本类分开,并有一些特定于平台的“Painter”可以获取每个基本对象并以特定于平台的方式绘制它。另一种解决方案是每个平台的并行层次结构(我倾向于避免这种情况,但有时需要 - 例如,如果您需要包装窗口句柄)或“功能位”方法。

关于c++ - 接口(interface)层次设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1747416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com