java - 实用程序类静态方法和继承

标签 java design-patterns

我的应用程序有一个带有静态方法的实用程序类,这些方法负责显示通知并在发生错误时选择性地发送电子邮件:

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/

相关文章:

c++ - 代表四开棋盘游戏棋子的最佳方式

C# 设计,以便我可以轻松添加/更新映射到数据库的对象

c# - 为什么要用容器来存放观察者?

java - 由查询定义的 Hibernate 实体属性

java - 如何在java中保存文件

java - 最小化 Java 进程中的应用程序数据内存开销

java - Android 将字符串传递给另一个 Activity

java - H2 - 发生非法反射访问操作

php - 使用工厂获取特定对象有什么优点吗?

java - 将 get 和 set 方法组合成一个方法是不好的做法吗