这是什么设计模式?

发布于 2024-10-28 20:56:02 字数 438 浏览 2 评论 0原文

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

class Base
{
  public:
    virtual ~Base
    {
    }

    void foo()
    {
      doFoo();
    }

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

那么派生将是:

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

  private:
    virtual void doFoo()
    {
    }
};

我确信我在某处看到了这是一种设计模式,但现在我在任何地方都找不到它,并且不记得它是如何调用的。

那么,这种设计模式怎么称呼呢?

Several years ago, I used to create interfaces like this :

class Base
{
  public:
    virtual ~Base
    {
    }

    void foo()
    {
      doFoo();
    }

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

then a derived would be :

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

  private:
    virtual void doFoo()
    {
    }
};

I am sure I saw this as a design pattern somewhere, but now I can not find it anywhere, and can not remember how it is called.

So, how is this design pattern called?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

狼性发作 2024-11-04 20:56:02

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

Your foo method shouldn't be virtual. And in this case the design pattern is called NVI - non-virtual interface

你与清晨阳光 2024-11-04 20:56:02

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

模板方法定义程序
算法的骨架。一个或多个
算法步骤可以是
被子类覆盖以允许
不同的行为,同时确保
总体算法是
仍然关注。

我已经看到这种模式大量用于“强制”调用基类实现(通常必须在派生类中显式完成)。

This is the template method pattern. Relevant excerpt from Wikipedia:

A template method defines the program
skeleton of an algorithm. One or more
of the algorithm steps can be
overridden by subclasses to allow
differing behaviors while ensuring
that the overarching algorithm is
still followed.

I've seen this pattern used a lot to "enforce" calling the base class implementation (which normally has to be done explicitly in the deriving class).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文