我了解 Strategy 和 Abstract Factory 设计模式 - 但是它们不能解决我当前的问题:
我正在创建一个 C++ 库,它提供了一个非常基本的 GUI。但是我希望用户能够在编译时选择使用哪个 GUI 库(比如 Qt 或 FLTK)来实际呈现 GUI。然而,用户应该只需要了解我的库中的方法。
应该可以使用 Qt 后端或 FLTK 后端编译相同的代码而无需任何更改。
我想到了这样的事情:
class A
{
// do things that are not specific to QT or FLTK here as there are many
// methods I will need independent of the backend
}
class QT_A : public A
{
// Implement the actual creation of a window, display of a widget here using Qt
}
class FLTK_A : public A
{
// Implement the actual creation of a window, display of a widget here using FLTK
}
问题是我不想让用户知道
QT_A
或 FLTK_A
。用户(开发人员)应该只处理 A
。另外,我不能同时拥有这两种变体,因为我不希望我的库同时依赖 Qt 和 FLTK;只是在编译时选择的那个。 最佳答案
一种选择是另一个答案中描述的 Pimpl 成语。
另一种选择是工厂返回指向接口(interface)类的指针:
std::unique_ptr<A> make_A()
{
#if defined(USING_QT)
return std::unique_ptr<A>(new QT_A(...));
#elif defined(USING_FLTK)
return std::unique_ptr<A>(new FLTK_A(...));
#else
#error "No GUI library chosen"
#endif
}
关于c++ - 在单个接口(interface)后面隐藏多个实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14486080/