Rig*_*ggy 3 java inheritance design-patterns
早上好,
我在工作中继承了一些遗留代码,它使用了一种相当不寻常的设计模式.我在论坛上找到的类似模式的唯一参考就在这里.情况是原始设计者有一个通用的父类(非抽象),它有一个直接引用子类的静态工厂方法.
以下是遗留代码中的几个位置的编码样式示例:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Log4JLoggerFactory和LogBackLoggerFactory扩展LoggerFactory的位置.
这对我来说真的很陌生,但在我重新考虑代码之前,这个设计模式是否有任何目的或好处(甚至还有正式名称)?
任何想法或建议表示赞赏.谢谢!
编辑:在阅读了Yishai的回复后,我想我会在维基百科的战略模式文章中加入一个链接,以便于参考.感谢大家的回复!
Yis*_*hai 11
它是Java中非常标准的模式,也是实现策略模式的常用方法.您始终可以在标准API中看到它(Calendar与GregorianCalendar,NumberFormat与DecimalFormat等).
话虽这么说,依赖注入是所有的愤怒,这样的模式可能确实被用奉献工厂接口专用的工厂类取代,但在没有一个更大的设计的原因,我想你给的例子是一个完全合理的设计选择.