java 父类引用子类_java – 父类是否应该引用子类?

早上好,

我在工作中继承了一些遗留代码,它使用了一种相当不寻常的设计模式.我在论坛上找到的类似模式的唯一参考是here.情况是原始设计者有一个通用的父类(非抽象),它有一个直接引用子类的静态工厂方法.

以下是遗留代码中的几个位置的编码样式示例:

public static LoggerFactory getLoggerFactory(LogType type) {

switch (type) {

case LOG4J:

return Log4JLoggerFactory.getInstance();

case LOGBACK:

return LogBackLoggerFactory.getInstance();

default:

throw new RuntimeException("No logger factory defined for type " + type);

}

}

Log4JLoggerFactory和LogBackLoggerFactory扩展LoggerFactory的位置.

这对我来说真的很陌生,但在我重新考虑代码之前,这个设计模式是否有任何目的或好处(甚至还有正式名称)?

任何想法或建议表示赞赏.谢谢!

编辑:在阅读了Yishai的回复后,我想我会包含一个链接到Wikipedia article on the Strategy pattern,以方便参考.感谢大家的回复!

解决方法:

它是Java中非常标准的模式,也是实现策略模式的常用方法.您始终可以在标准API中看到它(Calendar与GregorianCalendar,NumberFormat与DecimalFormat等).

话虽如此,随着依赖注入风靡一时,这样的模式可能会被专用的Factory类替换为具有专用的Factory接口,但是在没有更大设计理由的情况下,我认为你给出的例子是完全合理的设计选择.

标签:java,design-patterns,inheritance

来源: https://codeday.me/bug/20190713/1451901.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值