我们正在开发基于 Qt 的嵌入式软件 UI 框架,该框架目前支持两种类型的设备——手机和平板电脑。稍后可能会有其他外形尺寸具有完全不同的 UI。目前,手机和平板电脑的 UI 相似,差异主要在于尺寸。我们希望向应用程序开发人员(内部,没有外部应用程序)公开一个通用 API,这样他们就不必为每个平台编写单独的屏幕。
要开发屏幕,应用程序开发人员必须从 Screen 类或更专业的屏幕(例如 PrefScreen 类)继承。我们希望向应用程序开发人员公开每个组件的统一接口,但在框架中使用特定于平台的实现。我们有以下课程:
ScreenBase(公开所有平台通用的接口) ScreenPhone : ScreenBase ScreenTablet : ScreenBase
PrefScreenBase(公开所有平台通用的接口)
PrefScreenPhone:PrefScreenBase PrefScreenTablet:PrefScreenBase
为了实现它,我们有以下类型定义:
#ifdef PHONE
typedef ScreenPhone Screen;
typedef PrefScreenPhone PrefScreen;
#elif TABLET
typedef ScreenTablet Screen;
typedef PrefScreenTablet PrefScreen;
#endif
继承结构如下 ScreenBase
|_ScreenPhone
|_ScreenTablet
PrefScreenBase : 屏幕(根据为其构建的平台解析为 ScreenPhone 或 ScreenTablet)
|_PrefScreenPhone
|_PrefScreenTablet
Screen 将在手机版本上解析为 ScreenPhone,并在平板电脑版本上解析为 ScreenTablet。PrefScreen 将在手机版本上解析为 PrefScreenPhone,并在平板电脑版本上解析为 PrefScreenTablet。
在手机上,层次结构为 ScreenBase->ScreenPhone->PrefScreenBase->PrefScreenPhone 在平板电脑上,层次结构为 ScreenBase->ScreenTablet->PrefScreenBase->PrefScreenTablet
本质上,平台特定类派生自通用 *Base 类,而 *Base 类派生自基于其构建平台的适当类。我们考虑使用桥接模式 (http://en.wikipedia.org/wiki/Bridge_pattern) 来解决问题,但我们的截止日期似乎不允许这样做。此外,由于我们的框架基于 Qt 框架,因此将实现与接口分离会很复杂。
上述方法是否在任何框架中使用?您认为上述方法存在重大问题吗?如果是这样,有什么替代方案?我们的主要目标是为应用程序开发人员抽象出平台差异,并确保最大程度地重用代码。