这是什么设计模式?

时间:2011-03-30 08:59:09

标签: c++ design-patterns

几年前,我曾经创建过如下界面:

class Base
{
  public:
    virtual ~Base
    {
    }

    void foo()
    {
      doFoo();
    }

  private:
    virtual void doFoo() = 0;
};

然后派生的将是:

class Derived : public Base
{
  public:
    virtual ~Derived()
    {
    }

  private:
    virtual void doFoo()
    {
    }
};

我确信我在某处看到这是一种设计模式,但现在我无法在任何地方找到它,也无法记住它是如何调用的。

那么,这个设计模式是如何调用的?

2 个答案:

答案 0 :(得分:8)

您的foo方法不应该是虚拟的。在这种情况下,设计模式称为NVI - non-virtual interface

答案 1 :(得分:8)

这是template method pattern。维基百科的相关摘录:

  

模板方法定义程序   算法的骨架。一个或多个   算法步骤可以   由子类重写以允许   确保不同的行为   总体算法是   仍然跟着。

我已经看到这种模式用了很多来“强制”调用基类实现(通常必须在派生类中明确地完成)。