【发布时间】:2018-12-05 21:17:02
【问题描述】:
在模板方法模式中,我们有一个定义为抽象的超类。我们有扩展这个类的具体类。
假设我们在模板方法中添加了一个新函数,并在一些子类中覆盖了它(仅在某些类中使用)。我们在其他类中将这个新方法覆盖为空(函数没有主体)。
这个操作算作代码重复吗?
例如,在模板方法中,我们有一个新函数 doA() (我坚持使用 doA() 作为钩子方法)。我只想在 Class1 和 doZ() 和 doY() 之间使用这个函数。
如果我将此函数添加到模板方法并在 Class2 中覆盖此函数为空。这算作代码重复吗?
public void template(){
doX();
doY();
doZ();
}
public void template(){
doX();
doY();
doA();
doZ();
}
【问题讨论】:
-
为什么要覆盖这个空而什么都不做?
-
因为方法应该按顺序调用
-
订单是什么意思?是在调用doA()之后首先调用doX()然后调用doZ()吗?方法也是抽象的吗?
-
在我们调用“template()”时添加doA()函数之前,首先是doX(),然后是doY(),最后是doZ()方法。添加doA()函数后;当客户端调用 template() 时,我们的函数调用顺序将是 doX()、doY()、doA 和 doZ()。
-
我建议只在模板类中将必要的方法标记为抽象。如果子类不一定需要特定方法,那么您可以尽可能编写基本实现。由于我不知道您要在子类中实现什么目标,因此很难回答这是否是多余的
标签: java oop design-patterns template-method-pattern