【发布时间】:2012-04-23 16:36:26
【问题描述】:
编写有点低级的 C++ 内容,您经常需要编写特定于操作系统的内容。让我们以 MessageBox() 函数为例(不是一个出色的例子,因为框架会这样做,但很容易理解)。
假设您有一个基类App,每个项目都提供一个自定义子类,如MyApp。你可以有一个App::MessageBox() 方法,每个操作系统有几个#ifdef 块。或者,您可以有一个基类/接口,每个操作系统的子类提供实现。例如AppWin32 : public App
在某种程度上,后者对我来说似乎更整洁,但另一方面,这意味着您的 MyApp 必须使用一些丑陋的代码来确保它是正确的特定于操作系统的基类的子类。
有什么更好的方法?
【问题讨论】:
-
必须使用一些丑陋的代码来确保它子类化了正确的操作系统特定的基类 嗯... ugly 代码实际上有一个名称:Factory 设计模式,我认为没有人会说它丑陋。
-
工厂模式如何应用于从特定于操作系统的基类的子类化?
-
@John:工厂根据输入条件(操作系统等)创建正确的特定派生类。客户只需调用 Thingy::Create(args) 并 Create 处理确定要实例化和返回哪个派生类的所有细节。
标签: c++ architecture cross-platform