这是什么设计模式?

BЈо*_*вић 7 c++ design-patterns

几年前,我曾经创建过这样的接口:

class Base
{
  public:
    virtual ~Base
    {
    }

    void foo()
    {
      doFoo();
    }

  private:
    virtual void doFoo() = 0;
};
Run Code Online (Sandbox Code Playgroud)

然后派生的将是:

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

  private:
    virtual void doFoo()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

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

那么,这种设计模式如何称呼?

Arm*_*yan 8

你的foo方法不应该是虚拟的.在这种情况下,设计模式称为NVI - 非虚拟接口

  • @Stephane:那么......呃...如果它不在GoF书中,那么它不是一个模式?:))) (6认同)
  • @Stephane:WTF和GoF有什么关系吗?甚至一次在问题中也没有提到它.你知道,其他模式不存在于那本书中. (5认同)

Chr*_*ich 8

这是模板方法模式.维基百科的相关摘录:

模板方法定义算法的程序框架.子类可以覆盖一个或多个算法步骤,以允许不同的行为,同时确保仍然遵循总体算法.

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

  • 这不是模板方法模式,虽然它表面上看起来很像.正如Armen Tsirunyan所说,这是非虚拟界面模式. (5认同)
  • 为什么这会被贬低?我认为,在阅读[链接页面](http://en.wikibooks.org/wiki/More_C++_Idioms/Non-Virtual_Interface)上的描述后,NVI只是模板方法的一个特例,这是公平的. .有没有理由说这是一种"错误的"理解? (2认同)