0

在模板方法模式中,我们有一个定义为抽象的超类。我们有扩展这个类的具体类。

假设我们在模板方法中添加了一个新函数,并在一些子类中覆盖了它(仅在某些类中使用)。我们在其他类中将这个新方法覆盖为空(函数没有主体)。

此操作是否算作代码重复?

在此处输入图像描述

例如,在模板方法中,我们有一个新函数 doA()(我坚持使用 doA() 作为钩子方法)。我只想在 Class1 和 doZ() 和 doY() 之间使用这个函数。

如果我将此函数添加到模板方法并在 Class2 中覆盖此函数为空。这算作代码重复吗?

public void template(){
    doX();
    doY();
    doZ();
}

public void template(){
    doX();
    doY();
    doA();
    doZ();
}
4

1 回答 1

0

当然不。您可以从gof23一书中找到模板方法模式中有两种类型的方法:

  • 抽象方法,它没有实现体但等待子类覆盖
  • hook方法,它只是一个空方法,意思是你可以在需要的时候实现它,但不是必须的
于 2018-12-05T13:17:02.587 回答