【发布时间】:2014-05-04 05:59:21
【问题描述】:
在我公司的 C++ 代码库中,我看到很多这样定义的类:
// FooApi.h
class FooApi {
public:
virtual void someFunction() = 0;
virtual void someOtherFunction() = 0;
// etc.
};
// Foo.h
class Foo : public FooApi {
public:
virtual void someFunction();
virtual void someOtherFunction();
};
Foo 是唯一一个继承自FooApi 的类,而接受或返回指向Foo 对象的指针的函数使用FooApi *。它似乎主要用于单例类。
这是编写 C++ 代码的常用命名方式吗?它的意义何在?我看不出有一个单独的、纯粹的抽象类来定义类的接口有什么用。
编辑[0]:抱歉,澄清一下,FooApi 仅派生一个类,以后无意添加其他类。
编辑[1]:我一般理解抽象和继承的意义,但不理解这种特殊的继承用法。
【问题讨论】:
-
这不是真正的设计模式,而是核心 OOP 概念
-
你怎么知道以后没有派生其他类的打算?即使作者本人无意从
FooApi派生,他也为其他人提供了从中派生的选项。或者,如果他后来决定他确实想要这样做,那么他自己也可以选择。 -
因为它在整个大型代码库中被重复使用,并且所有抽象类只有一个派生类,并且它们都以派生类命名。 IE。有 Foo、FooApi、Bar、BarApi、Quxx、QuxxApi 等类。代码的其他部分正常使用继承,不遵循此命名方案。
-
这种技术的名称是interface。
标签: c++ design-patterns inheritance