早上好,
我在工作中继承了一些遗留代码,它使用了一种相当不寻常的设计模式.我在论坛上找到的类似模式的唯一参考是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