几年前,我曾经创建过如下界面:
class Base
{
public:
virtual ~Base
{
}
void foo()
{
doFoo();
}
private:
virtual void doFoo() = 0;
};
然后派生的将是:
class Derived : public Base
{
public:
virtual ~Derived()
{
}
private:
virtual void doFoo()
{
}
};
我确信我在某处看到这是一种设计模式,但现在我无法在任何地方找到它,也无法记住它是如何调用的。
那么,这个设计模式是如何调用的?
答案 0 :(得分:8)
您的foo
方法不应该是虚拟的。在这种情况下,设计模式称为NVI - non-virtual interface
答案 1 :(得分:8)
这是template method pattern。维基百科的相关摘录:
模板方法定义程序 算法的骨架。一个或多个 算法步骤可以 由子类重写以允许 确保不同的行为 总体算法是 仍然跟着。
我已经看到这种模式用了很多来“强制”调用基类实现(通常必须在派生类中明确地完成)。