代码之家  ›  专栏  ›  技术社区  ›  Jeff

私有方法模式的私有重写?(回答:NVI)

  •  1
  • Jeff  · 技术社区  · 14 年前

    用来描述方法的公认术语(如果有的话)是什么?这些方法仅仅是虚拟地从基中的其他方法调用的?我偶尔会看到这被称为回调,但这似乎偏离了该术语的最初定义。我甚至不确定这个优点是否被称为模式,但我正在尝试更精确地评论我的代码。谢谢你的帮助!

    // Abstract class.
    class A {
    public:
      void run() { while (call()) { /* ... */ } }
    private:
      virtual bool call() = 0;
    };
    
    // Completion/specialization of A.
    class B : public A {
    private:
      // Standard term to indicate this pattern?
      bool call();
    };
    

    总结 :这似乎被称为 非虚拟接口 模式,一个特殊的案例 模板方法模式 . 感谢尼克和史蒂文的帮助!

    4 回复  |  直到 14 年前
        1
  •  3
  •   Nick Meyer    14 年前

    这有时被称为“非虚拟接口”(或Nvi)模式。当虚函数的实现需要在派生类之间有所不同时,通常使用该方法,但当调用函数时,基类需要控制。

    例如,基类可以在虚拟调用之前或之后进行另一个函数调用,而不是将虚拟函数设为公共的,并依赖重写来调用基实现本身(以及在正确的时间!)

        2
  •  5
  •   Steven Sudit    14 年前
        3
  •  1
  •   sbi    14 年前

    我听说你没有的模式 virtual 作为非虚拟接口模式的接口中的函数, NVI 简而言之。

    在其他上下文中,它被称为模板方法模式,其中 run() 是一个 模板法 ,派生类跳进来填补空白。

        4
  •  0
  •   Pontus Gagge    14 年前

    嗯。。。私有虚拟?为什么要发明新术语?它是一种语言结构,而不是一种习语,在我看来,它还不够有趣,不能称为模式。