我的应用程序有一个带有静态方法的实用程序类,这些方法负责显示通知并在发生错误时选择性地发送电子邮件:
public static void sendEvent(final String description, final String name) {
....
SmtpParms smtpParams = readSmtpParms();
....
}
private static SmtpParms readSmtpParms() {
// read from properties file
....
}
我们的代码库在两个应用程序之间共享。应用程序 A 从属性文件中读取 SMTP 参数。我主要在应用程序 B 上工作。应用程序 B 没有使用此电子邮件功能,但仍在调用以在我们的 GUI 上显示事件通知。现在应用程序 B 需要从数据库中读取 SMTP 参数。
我想重用现有代码,但由于这些方法是静态的,我不能只继承这个实用程序类并将所有应用程序 B 代码指向该子类。此实用程序在多个 JAR 中被引用,我更喜欢尽可能少更改代码的解决方案。
我想如果我可以将 readSmtpParms
分离到一个单独的类中,那可能会有所帮助。但是我想不出一种方法可以在不更改 sendEvent
的方法签名的情况下将源(属性文件与数据库)传递给实用程序类实例。我想另一种方法是创建另一种方法 sendEventUsingDatabase
但我仍然必须更新应用程序 B 代码中对 sendEvent
的所有引用。
有没有既不改变原代码又不重复代码的解决方案?此代码是否匹配设计模式或反模式?谢谢。
最佳答案
您举了两个完全不同的行为案例(.properties 与数据库),这让我认为这些不应该是静态方法。您需要一个接口(interface),应用程序 A 和 B 可以插入它们自己的自定义行为。
关于java - 实用程序类静态方法和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6035122/