早上好,
我在工作中继承了一些遗留代码,它使用了一种相当不寻常的设计模式。我在论坛上找到的类似模式的唯一参考是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 的回复后,我想我应该添加一个链接维基百科关于策略模式的文章,方便参考。感谢大家的回复!
它是 Java 中非常标准的模式,也是实现策略模式的常用方法。您一直在标准 API 中看到它(Calendar 与 GregorianCalendar、NumberFormat 与 DecimalFormat 等)。
话虽这么说,随着依赖注入风靡一时,这种模式确实可能会被带有专用 Factory 接口的专用 Factory 类所取代,但在没有更大的设计原因的情况下,我认为您给出的示例是完全合理的设计选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)