我有一个接口(interface)类类似于:
class IInterface
{
public:
virtual ~IInterface() {}
virtual methodA() = 0;
virtual methodB() = 0;
};
然后我实现接口(interface):
class AImplementation : public IInterface
{
// etc... implementation here
}
当我在应用程序中使用接口(interface)时,最好创建具体类 AImplementation 的实例。例如。
int main()
{
AImplementation* ai = new AIImplementation();
}
或者像下面这样在接口(interface)中放置一个工厂“创建”成员函数是否更好:
class IInterface
{
public:
virtual ~IInterface() {}
static std::tr1::shared_ptr<IInterface> create(); // implementation in .cpp
virtual methodA() = 0;
virtual methodB() = 0;
};
然后我就可以像这样在 main 中使用接口(interface)了:
int main()
{
std::tr1::shared_ptr<IInterface> test(IInterface::create());
}
第一个选项似乎是常见的做法(不能说是对的)。然而,第二个选项来自“Effective C++”。
最佳答案
使用接口(interface)的最常见原因之一是您可以“针对抽象进行编程”而不是针对具体实现。
这样做的最大好处是它允许更改部分代码,同时最大限度地减少对剩余代码的更改。
因此,虽然我们不知道您正在构建的内容的完整背景,但我会选择接口(interface)/工厂方法。
话虽如此,在较小的应用程序或原型(prototype)中,我通常从具体的类开始,直到我了解在何处/是否需要接口(interface)。接口(interface)可以引入一定程度的间接性,这对于您正在构建的应用程序的规模来说可能不是必需的。
由于应用程序较小,我发现我实际上并不需要自己的自定义界面。与许多事情一样,您需要根据具体情况权衡成本和 yield 。
关于c++ - 使用 C++ 接口(interface)的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198055/