java 超类调用子类_java – 从超类调用子类方法不是最佳实践?

我正在开发一个项目,我们有一个抽象类(BaseConverter)和一个抽象方法(convert())和几个具体的方法.一个重要的具体方法是invokeConverter(),它基本上会调用子类中实现的convert()方法.

虽然我们的代码正在被其他人审查,但他告诉我,不应该从超类调用子类方法,他告诉这不是最佳实践.以下是我们的课程结构.有人可以告诉我这是不是一种正确的方法吗?

@Named

public abstract class BaseConverter{

@Inject

private ConversionDriver conversionDriver;//this class is responsible to return the correct subclass object based on the type

protected abstract String convert(Object toConvert);

public String invokeConverter(ConverterType type, Object toConvert){

conversionDriver.getConverter(type).convert(toConvert);//getConverter() return the subclass object based on the type

}

....

....

}

解决方法:

它实际上是一种名为GoF的模板方法的设计模式.但是,你不应该过度应用它,因为它有利于继承而不是组合.

Define the skeleton of an algorithm in an operation, deferring some

steps to subclasses. Template Method lets subclasses redefine certain

steps of an algorithm without changing the algorithm’s structure.

您会发现这种模式在许多已知的框架和插件中实现.但是,在某些情况下,您应该考虑不同的模式,如策略或装饰器.

例如,虽然策略模式使用委托来改变整个算法,但模板方法使用变形继承来改变算法的特定部分.策略还在运行时修改单个对象的逻辑,而模板方法通过子类化在编译时修改整个类的逻辑.

关于“最佳实践” – 这是一个有争议的术语.我相信当代码库增长时,应该替换模板方法以支持更好的设计模式,并且需要重构以获得更好的复杂性.

但有时它是满足您需求的最佳解决方案.例如,您可能有doExecute()方法,并希望其他程序员扩展您的类(而不是修改它),因此您可以让它们挂钩代码中提供beforeExecute()方法的部分.如果我们谈论各种对象的组合,成熟系统可能包括事件调度员功能.

标签:c,java,oop,design-patterns

来源: https://codeday.me/bug/20190623/1273163.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值